【问题标题】:How to combine data from another dataframe by calling column names in r如何通过在 r 中调用列名来组合来自另一个数据帧的数据
【发布时间】:2016-08-12 04:49:51
【问题描述】:

我有一个数据框:

df1 = read.table(text="X1   X2  X3  X4  X5  X6  X7
1   3   6   2   0   3   1
2   3   5   8   9   0   1
5   1   0   6   3   2   7", header=T, stringsAsFactors=F)

和另一个数据框。 id 列保存 df1 列名的向量:

df2 = read.table(text="id
'X2 X4 X7'
'X2 X3 X4 X6'
'X3 X5 X6 X7'
'X1'
'X1 X4'", header=T, stringsAsFactors=F)

我想添加更多列,添加的列数将取决于 df1 的行数。对于每个添加的列,将保留仅从 id 列定义的列中获取的每一行的粘贴值。 所以预期的结果:

df2 = read.table(text="id   V1  V2  V3
'X2 X4 X7'  '3 2 1' '3 8 1' '1 6 7'
'X2 X3 X4 X6'   '3 6 2 3'   '3 5 8 0'   '1 0 6 7'
'X3 X5 X6 X7'   '6 0 3 1'   '5 9 0 1'   '0 3 2 7'
'X1'    '1' '2' '5'
'X1 X4' '1 2'   '2 8'   '5 6'", header=T, stringsAsFactors=F) 

感谢敌人的帮助。

【问题讨论】:

    标签: r


    【解决方案1】:

    这有点复杂,但似乎有效

     cbind(
       df2
     , 
       t(sapply(
       #first find indexes of columns
       lapply(strsplit(df2$id, " "), match, names(df1)), 
       # now extract those values
       function(i) { apply(df1[,i, drop=F], 1, paste, collapse=" " )}))
     )
    

    返回

               id       1       2       3
    1    X2 X4 X7   3 2 1   3 8 1   1 6 7
    2 X2 X3 X4 X6 3 6 2 3 3 5 8 0 1 0 6 2
    3 X3 X5 X6 X7 6 0 3 1 5 9 0 1 0 3 2 7
    4          X1       1       2       5
    5       X1 X4     1 2     2 8     5 6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 2019-09-04
      • 1970-01-01
      • 2020-07-24
      相关资源
      最近更新 更多