【问题标题】:Selecting combination with a fixed column in R在R中选择与固定列的组合
【发布时间】:2015-12-16 15:29:01
【问题描述】:

我有一个看起来像这样的数据框

 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"   )

【问题讨论】:

  • 请详细解释“cc”列背后的逻辑
  • 我想这应该会给你library(data.table);setDT(d1)[,{tmp &lt;- combn(bb,2); list(bb= tmp[1,], cc= tmp[2,]) } , by = aa]的结果(基于@Ananda Mahto的cmets

标签: r combinations combn


【解决方案1】:

使用@Ananda Mahto 对combn 的慷慨cmets,我们将'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

【讨论】:

    【解决方案2】:

    使用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
    

    【讨论】:

    • 谢谢@jeremycg,我已经使用了你的解决方案。
    【解决方案3】:

    只有基础 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
    

    【讨论】:

    • 我也想过类似的解决方案,但感谢答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-09
    相关资源
    最近更新 更多