【问题标题】:Generate all unique pairs of factor and align other variables in same way R生成所有唯一的因子对并以相同的方式对齐其他变量 R
【发布时间】:2016-07-01 10:59:57
【问题描述】:

我有一个数据框,其中包含每个人的唯一个人 ID 和测量值,例如

> personDat <- data.frame(personID = c("A","B","C","D"),value = rnorm(4))
> personDat
  personID      value
1        A -0.9246883
2        B  0.5175514
3        C -1.0109688
4        D  1.1614124

现在我需要创建所有独特的个体对,我可以使用 combn 函数来完成:

> perCombs <- t(combn(personDat$personID,2))
> perCombs
     [,1] [,2]
[1,] A    B   
[2,] A    C   
[3,] A    D   
[4,] B    C   
[5,] B    D   
[6,] C    D   
Levels: A B C D

现在我想在perCombs 中添加两个额外的列,一个用于来自personDat 中第二列的相应测量值/值,用于第一个 personID,然后是第二个 personID 的相应值。

基本上,我需要对唯一一对 personID 的所有值进行二元运算,如果我有列,我可以以快速矢量化的方式进行。

编辑:天真的方法是:

perCombs <- data.frame(per1 = perCombs[,1],
                       per2 = perCombs[,2],
                       val1 = matrix(0,6,1),
                       val2 = matrix(0,6,1))
for(i in 1:6){
  print(i)
  perCombs[i,3] <- personDat[as.character(personDat$personID)==as.character(perCombs[i,1]),2]
  perCombs[i,4] <- personDat[as.character(personDat$personID)==as.character(perCombs[i,2]),2]
}

【问题讨论】:

    标签: r combinations


    【解决方案1】:

    我们可以使用match

    cbind(perCombs,  `dim<-`(personDat$value[match(perCombs, 
                             personDat$personID)], dim(perCombs)))
    

    【讨论】:

    • @Gumeo 确保在data.frame 中使用stringsAsFactors=FALSE,以免转换为factor
    • 注意!那很方便!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2021-07-20
    • 2018-08-02
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多