2016-08-11 145 views
1

打电话列名我有一个数据帧相结合。 id列持有DF1列名的载体:如何将数据从另一个数据帧由r中

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) 

感谢敌人的帮助。

回答

2

这是有点麻烦,但似乎工作

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 
相关问题