首页 > 解决方案 > 如果在 R 中相似(两列),则将一个数据(三列)中的一列添加到另一个数据集(两列)

问题描述

我有以下问题:

我有两个数据框

第一个看起来像这样:

    A      P     S
   <dbl>  <dbl> <dbl>
1 450001      2     2
2 450006      1     1
3 450006      2     2 
4 450006      3     2
5 450007      1     1
6 450008      1     2
7 400008      2     1

P是分类的,只能取值(0,1,2),S也是分类的,只能取值(1,2)。第一个数据框有大约 2000 行

我的第二个数据框如下所示:

     A      P
   <dbl>  <dbl>
1 450001      2
2 450001      2
3 450001      2
4 450006      3
5 450006      2
6 450008      2
7 400008      1
8 400008      1
9 400008      2

它有大约 50.000 行。基本上我想将数据框 1 中的列 S 添加到数据框 2,但显然它们的长度不同。所以基本上我想要这样的东西:进入数据框 2 的第一行并将第一行与数据框 1 进行比较,它们是相同的,所以将正确的值 S = 2 添加到数据框 1 的第一行。下一步,去到数据框 2 中的第 2 行并再次比较您可以看到它与第 1 行中的值相同的值,因此将 S = 2 添加到第二行。

我已经尝试了很多东西,if-else 循环但没有任何效果

我的新数据框应如下所示:

     A      P     S
   <dbl>  <dbl>
1 450001      2   2
2 450001      2   2
3 450001      2   2
4 450006      2   2
5 450006      2   2
6 450007      1   1
7 400008      1   2
8 400008      2   1


标签: r

解决方案


欢迎来到堆栈溢出。您可以使用该功能实现此目的merge。尝试类似:

merge(df1, df2, by="A", all=FALSE, all.y=TRUE)

通过指定all.y=TRUE,您是在告诉它保留 df2 中的所有行并应用 df1 中的相关行。(这假设您的第一个数据帧称为 df1,第二个数据帧称为 df2,并且您希望将所有行保留在 df2 中。)

如果您只想保留 df1 中的行而不是 df2 中的所有行,您可以使用:

merge(df1, df2, by="A", all=FALSE, all.x=TRUE)

查看?merge更多详情


推荐阅读