根据另一行中另一列的值将列添加到数据框

2024-04-30

我正在寻找我的具体问题的答案,但没有找到结论。我找到了这个:根据其他列的值将列添加到数据框 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(使用前将#替换为@)

根据另一行中另一列的值将列添加到数据框 的相关文章

随机推荐