gpt4 book ai didi

R:将数据从行添加到具有条件的列

转载 作者:行者123 更新时间:2023-12-02 03:26:03 24 4
gpt4 key购买 nike

我有两个数据框,

df1

number x_1 y_1
1 a a
2 a b
3 b b
4 c b
5 c c

df2

number_1 x_1 y_1 number_2 x_2 y_2
1 2
1 3
1 4
1 5
2 3
2 4
2 5
3 4
3 5
4 5

我想根据 number_1 和 number_2 是否与 df1 中数字列中的数字匹配,将数据添加到列 x_1、y_1、x_2、y_2 中。所以在 df2 的前两行,我应该有:

df2

number_1 x_1 y_1 number_2 x_2 y_2
1 a a 2 a b
1 a a 3 b b

我试过这样的方法,但它不起作用,而且对于一个非常庞大的数据集,它需要很长时间:

for(i in 1:nrow(df1))
for(j in 1:nrow(df2))
if(df2$number_1[j] == df1$number[i])
df2$x_1[j] = df1$x_1[i]
df2$y_1[j] = df1$y_1[i]
if(df2$number_2[j] == df1$number_1[i])
df2$x_1[j] = df1$x_1[i]
df2$y_1[j] = df$y_1[i]

我是初学者,如果您也能解释一下您建议的步骤,我将不胜感激。非常感谢。

最佳答案

尝试 mergeleft_join 来自 dplyr

merge(df1,
merge(df1,df2[,c(1,4)], by.x='number', by.y='number_1'),
by.x='number', by.y='number_2')

或者

library(dplyr)
left_join(
left_join(df2[c(1,4)], df1, by=c('number_1'='number')) ,
df1, by=c('number_2'='number'))

或者正如@David Arenburg 在评论中提到的,match 可以在这里使用。

df2[c("x_1", "y_1")] <- df1[match(df2$number_1, df1$number), 2:3]
df2[c("x_2", "y_2")] <- df1[match(df2$number_2, df1$number), 2:3]

关于R:将数据从行添加到具有条件的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30234143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com