r - 如果在 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
解决方案
欢迎来到堆栈溢出。您可以使用该功能实现此目的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
更多详情
推荐阅读
- apache-nifi - 如何从 CSV 文件中读取
- oracle - 只想为特定模式更改 oracle DB 中的 NLS_DATE_FORMAT
- java - 使用带有 keyStore.load 的 HttpClient 的 java.io.EOFException 发生异常
- amazon-s3 - 来自 s3 存储桶的 m3u8 扩展文件的签名 url
- typescript - 覆盖接口中可选的继承嵌套属性
- c - 我可以使用联合来表达一个结构和多个打包成员吗?
- c# - 使用 IText 7 生成一个包含从 html 转换的多页的 pdf 文档
- hive - 如何将配置单元表放在复杂的嵌套 XML 文件上
- java - 如何在 OpenLiberty 的 server.xml 配置属性文字/变量中使用自定义转换器?
- java - 中止 jenkin 构建不会杀死 Maven 项目类型的安全子进程