我正在寻找我的具体问题的答案,但没有找到结论。我找到了这个:根据其他列的值将列添加到数据框 https://stackoverflow.com/questions/26067161/add-column-to-data-frame-based-on-values-of-other-columns,但这并不完全是我在具体情况下所需要的。
我真的是 R 的初学者,所以我希望有人可以帮助我或者给我一个很好的提示。
这是我的数据框的示例:
ID answer 1.partnerID
125 3 715
235 4 845
370 7 985
560 1 950
715 5 235
950 5 560
845 6 370
985 6 125
我尝试通过一个例子来描述我想要做什么:
第一行是ID为125的人的数据。这个人的第一个伙伴是ID为715的人。我想创建一个新列,其中包含每个人的伙伴的答案值。它应该看起来像这样:
ID answer 1.partnerID 1.partneranswer
125 3 715 5
235 4 845 6
370 7 985 6
560 1 950 5
715 5 235 4
950 5 560 1
845 6 370 7
985 6 125 3
因此,R 应采用 1.partnerID 列的值(在本例中为“715”)并搜索该行,其中“715”是列 ID 中的值(不存在超过一次的 ID)。
从这个特定行 R 应该从答案列中获取值(在本例中为“5”)并将其放入新列“1.partneranswer”中,但位于第 125 号人的行中。
我希望有人能理解我想做什么...
我的问题是,我可以想象如何为每手的每一行编写此操作,但我认为需要有一种简单的方法来一次为所有行执行此操作? (特别是因为在我的原始 data.frame 中,每人有 5 个合作伙伴,并且要从中传输值的列不止一列,因此为每手的每一行编写它需要花费很多时间)。
我希望有人能帮帮忙。
谢谢你!
一种解决方案是使用apply
如下:
df$partneranswer <- apply(df, 1, function(x) df$answer[df$ID == x[3]])
输出将如上面所期望的那样。可能存在无循环的方法。
编辑:使用添加无循环(矢量化答案)match
:
df$partneranswer <- df$answer[match(df$X1.partnerID, df$ID)]
df
ID answer X1.partnerID partneranswer
1 125 3 715 5
2 235 4 845 6
3 370 7 985 6
4 560 1 950 5
5 715 5 235 4
6 950 5 560 1
7 845 6 370 7
8 985 6 125 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)