R 通过另一个向量中包含的字符串动态引用向量名称
数据帧HAVE包含名为partner的标识符向量,其值与该数据帧中的其他向量名称相同 拥有:R 通过另一个向量中包含的字符串动态引用向量名称,r,loops,data-manipulation,data-cleaning,R,Loops,Data Manipulation,Data Cleaning,数据帧HAVE包含名为partner的标识符向量,其值与该数据帧中的其他向量名称相同 拥有: id partner met id1 id2 id3 id4 id5 id6 id7 id8 id9 id10 id1 id10 1 NA NA NA NA NA NA NA NA NA NA id2 id6 0 NA NA NA NA NA NA NA NA NA NA id3 id7 0 NA NA NA NA NA
id partner met id1 id2 id3 id4 id5 id6 id7 id8 id9 id10
id1 id10 1 NA NA NA NA NA NA NA NA NA NA
id2 id6 0 NA NA NA NA NA NA NA NA NA NA
id3 id7 0 NA NA NA NA NA NA NA NA NA NA
id4 id9 1 NA NA NA NA NA NA NA NA NA NA
id5 id8 1 NA NA NA NA NA NA NA NA NA NA
id6 NA NA NA NA NA NA NA NA NA NA NA NA
id7 NA NA NA NA NA NA NA NA NA NA NA NA
id8 NA NA NA NA NA NA NA NA NA NA NA NA
id9 NA NA NA NA NA NA NA NA NA NA NA NA
id10 NA NA NA NA NA NA NA NA NA NA NA NA
id partner met id1 id2 id3 id4 id5 id6 id7 id8 id9 id10
id1 id10 1 NA NA NA NA NA NA NA NA NA 1
id2 id6 0 NA NA NA NA NA 0 NA NA NA NA
id3 id7 0 NA NA NA NA NA NA 0 NA NA NA
id4 id9 1 NA NA NA NA NA NA NA NA 1 NA
id5 id8 1 NA NA NA NA NA NA NA 1 NA NA
id6 NA NA NA NA NA NA NA NA NA NA NA NA
id7 NA NA NA NA NA NA NA NA NA NA NA NA
id8 NA NA NA NA NA NA NA NA NA NA NA NA
id9 NA NA NA NA NA NA NA NA NA NA NA NA
id10 NA NA NA NA NA NA NA NA NA NA NA NA
另一个向量met表示每个观察的id代表的受访者是否与其指定的合作伙伴会面。我需要在正确的列id1-id10中存储met的值,其中的列名相当于partner。例如,第一个观察值应在id10列中包含值1
想要:
id partner met id1 id2 id3 id4 id5 id6 id7 id8 id9 id10
id1 id10 1 NA NA NA NA NA NA NA NA NA NA
id2 id6 0 NA NA NA NA NA NA NA NA NA NA
id3 id7 0 NA NA NA NA NA NA NA NA NA NA
id4 id9 1 NA NA NA NA NA NA NA NA NA NA
id5 id8 1 NA NA NA NA NA NA NA NA NA NA
id6 NA NA NA NA NA NA NA NA NA NA NA NA
id7 NA NA NA NA NA NA NA NA NA NA NA NA
id8 NA NA NA NA NA NA NA NA NA NA NA NA
id9 NA NA NA NA NA NA NA NA NA NA NA NA
id10 NA NA NA NA NA NA NA NA NA NA NA NA
id partner met id1 id2 id3 id4 id5 id6 id7 id8 id9 id10
id1 id10 1 NA NA NA NA NA NA NA NA NA 1
id2 id6 0 NA NA NA NA NA 0 NA NA NA NA
id3 id7 0 NA NA NA NA NA NA 0 NA NA NA
id4 id9 1 NA NA NA NA NA NA NA NA 1 NA
id5 id8 1 NA NA NA NA NA NA NA 1 NA NA
id6 NA NA NA NA NA NA NA NA NA NA NA NA
id7 NA NA NA NA NA NA NA NA NA NA NA NA
id8 NA NA NA NA NA NA NA NA NA NA NA NA
id9 NA NA NA NA NA NA NA NA NA NA NA NA
id10 NA NA NA NA NA NA NA NA NA NA NA NA
如何使用文本变量的值系统地将值分配给名称与其他变量值匹配的变量?真正的集合包括id1-id100;这里有一个带有矢量化索引的选项。使用
将列索引与列名和“合作伙伴”列进行匹配,使用行序列获取列索引,cbind
创建矩阵
,根据索引提取数据集的元素并将其分配给“met”列
nm1 <- grep("^id\\d+$", names(df1))
i1 <- !is.na(df1$partner)
df1[nm1][cbind(seq_len(nrow(df1))[i1],
match(df1$partner[i1], names(df1)[nm1]))] <- df1$met[i1]
df1
# id partner met id1 id2 id3 id4 id5 id6 id7 id8 id9 id10
#1 id1 id10 1 NA NA NA NA NA NA NA NA NA 1
#2 id2 id6 0 NA NA NA NA NA 0 NA NA NA NA
#3 id3 id7 0 NA NA NA NA NA NA 0 NA NA NA
#4 id4 id9 1 NA NA NA NA NA NA NA NA 1 NA
#5 id5 id8 1 NA NA NA NA NA NA NA 1 NA NA
#6 id6 <NA> NA NA NA NA NA NA NA NA NA NA NA
#7 id7 <NA> NA NA NA NA NA NA NA NA NA NA NA
#8 id8 <NA> NA NA NA NA NA NA NA NA NA NA NA
#9 id9 <NA> NA NA NA NA NA NA NA NA NA NA NA
#10 id10 <NA> NA NA NA NA NA NA NA NA NA NA NA
nm1这很有道理-我很接近了。在这两种情况下,我得到了长度相同的对象:1 df1[nm1][cbind(seq_len(nrow(df1)),match(names(df1)[nm1],df1$partner))]2 df1$met……但当我将后者分配给前者时,我得到了一个错误:“…”中的错误:“'value”是错误的长度。它可能是更“完整”中缺失的函数“例如,我没有包括在内。我会修改问题。对不起,我的意思是:你的答案很有帮助,很有意义,但它产生了一个错误。在我提供的示例中,我认为这是因为您分配给df1[nm1][cbind(seq_len(nrow(df1))、match(names(df1)[nm1],df1$partner))]的对象df1$met
的长度与我提供的原始玩具示例(10对5)不同,因为错误表明值是错误的长度。但是,当我在接下来的5行中添加以解决此问题时,错误仍然存在。@JMQ抱歉,我认为它现在已修复