Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 通过另一个向量中包含的字符串动态引用向量名称_R_Loops_Data Manipulation_Data Cleaning - Fatal编程技术网

R 通过另一个向量中包含的字符串动态引用向量名称

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

数据帧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  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抱歉,我认为它现在已修复