选择与R中的固定列组合
我有一个像这样的数据框选择与R中的固定列组合,r,combinations,combn,R,Combinations,Combn,我有一个像这样的数据框 aa bb -------- a 1 a 2 a 3 b 4 b 5 b 1 我希望上面的数据帧有一对从“bb”中选取的元素,看起来像下面的帧 aa bb cc ------------- a 1 2 a 1 3 a 2 3 b 4 5 b 4 1
aa bb
--------
a 1
a 2
a 3
b 4
b 5
b 1
我希望上面的数据帧有一对从“bb”中选取的元素,看起来像下面的帧
aa bb cc
-------------
a 1 2
a 1 3
a 2 3
b 4 5
b 4 1
b 5 1
R输入码
d1 <- read.table(header = TRUE, sep = ";", text =
"aa;bb
a;1
a;2
a;3
b;4
b;5
b;1" )
d1使用@Ananda Mahto对combn
的慷慨评论,我们将'data.frame'转换为'data.table'(setDT(d1)
),按'aa'分组,得到'bb'(combn(bb,2)
)的成对组合,从中提取行以创建'bb'和'cc'
library(data.table)
setDT(d1)[,{tmp <- combn(bb,2)
list(bb= tmp[1,], cc= tmp[2,]) } , by = aa]
# aa bb cc
#1: a 1 2
#2: a 1 3
#3: a 2 3
#4: b 4 5
#5: b 4 1
#6: b 5 1
库(data.table)
setDT(d1)[,{tmp使用dplyr
:
library(dplyr)
d1 %>% group_by(aa) %>%
do(data.frame(t(combn(.[["bb"]], 2))))
Source: local data frame [6 x 3]
Groups: aa [2]
aa X1 X2
(fctr) (dbl) (dbl)
1 a 1 2
2 a 1 3
3 a 2 3
4 b 4 5
5 b 4 1
6 b 5 1
只有基R
d2 <- t(do.call(cbind, tapply(d1$bb, d1$aa, function(x)combn(x, 2))))
rownames(d2) <- d1$aa
d2
# [,1] [,2]
# a 1 2
# a 1 3
# a 2 3
# b 4 5
# b 4 1
# b 5 1
d2请更详细地解释“cc”列后面的逻辑我想这应该会得到结果library(data.table);setDT(d1)[,{tmp Thanx@jeremycg,我使用了你的解决方案。我也想到了类似的解决方案,但答案是Thanx。