【发布时间】:2016-11-16 20:23:11
【问题描述】:
目前,我正在努力解决与使用 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
现在我想查看组 (x) 中每对可能的颜色 (y)。所以我的理想结果是......
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
为了找到解决方案,我用谷歌搜索了它,发现了一个函数 permutation,这正是我正在寻找的,但我发现很难将它压缩到 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]
标签: r data.table lapply