В настоящее время я борюсь с проблемой, связанной с получением всех возможных перестановок внутри группы с использованием data.table.Извлечь все возможные пары внутри группы в data.table
Чтобы объяснить мою проблему, позвольте мне показать вам пример.
x <- c(1, 1, 1, 2, 2)
y <- c('red', 'blue', 'black', 'orange', 'red')
dt1 <- as.data.table(cbind(x,y))
dt1
x y
1: 1 red
2: 1 blue
3: 1 black
4: 2 orange
5: 2 red
Теперь я хочу видеть каждую возможную пару цветов (y) внутри группы (x). Так что мой идеальный результат был бы ....
x y1 y2
1 black blue
1 black red
1 blue black
1 blue red
1 red black
1 red blue
2 orange red
2 red orange
Чтобы найти решение для этого, я не прибегая к помощи, и я нашел функцию, перестановку, которая является то, что я ищу, но я считаю, что это трудно сжать это в рамки data.table.
y <- c('red', 'blue', 'black')
permutations(n=3, r=2, v=y, repeats.allowed=F)
[,1] [,2]
[1,] "black" "blue"
[2,] "black" "red"
[3,] "blue" "black"
[4,] "blue" "red"
[5,] "red" "black"
[6,] "red" "blue"
Так что я попытался сделать следующее, но очевидно, что есть ошибки ..
dt1[, .(j = lapply(.SD, permutations, n=.N, r=2, v=y, repeats.allowed=F)), by=x]
Любое предложение для этого? Я буду очень признателен.
Возможно, 'dt1 [, CJ (y, y), by = x] [V1! = V2]' – Henrik