2016-08-11 144 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 
相關問題