我有一个数据框:
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)
谢谢敌人的帮助。
这有点涉及,但似乎可行
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句