r - 是否有一个很好的 R 函数来分离两个数据帧之间的唯一列值,保持行?
问题描述
基本上我有2个具有这种基本结构的数据框:
Col1 | Col2 | Col3 | Col4 |
---|---|---|---|
啊啊啊 | 12 | xxx | 32b |
铁氟龙 | 21 | xxx | 14f |
伊德 | 12 | xxx | 54b |
韦斯 | 95 | xxx | 54r |
rtf | 44 | xxx | 99q |
fvg | 87 | xxx | 55小时 |
因此,第 1 列中的一些值在两个数据帧中重复,我想创建一个新数据帧,其中每个数据帧的 Col1 中只有具有唯一值的行,所以在伪代码中:
Unique_to_df1 <- df1[Unique_Function(查找 Col1 值不在 df2 中的行)] Unique_to_df2 <- df2[Unique_Function(查找 Col1 值不在 df1 中的行)]
我尝试了一些函数,但它们要么似乎只导出 Col1 的唯一值,而不是整个表,要么似乎只适用于从一个数据帧中删除重复值,而不是在两个数据帧之间进行比较。任何帮助/建议将不胜感激!
解决方案
anti_join(x, y)
删除 x 中与 y 匹配的所有观测值。
df1 <- data.frame(
stringsAsFactors = FALSE,
Col1 = c("aaa", "tfe", "eed", "wes", "rtf", "fvg"),
Col2 = c(12L, 21L, 12L, 95L, 44L, 87L),
Col3 = c("xxx", "xxx", "xxx", "xxx", "xxx", "xxx"),
Col4 = c("32b", "14f", "54b", "54r", "99q", "55h")
)
df2 <- data.frame(
stringsAsFactors = FALSE,
Col1 = c("a", "tfe", "ee", "ws", "rt", "fvg"),
Col2 = c(12L, 21L, 12L, 95L, 44L, 87L),
Col3 = c("xxx", "xxx", "xxx", "xxx", "xxx", "xxx"),
Col4 = c("32b", "14f", "54b", "54r", "99q", "55h")
)
library(dplyr)
unique1 <- df1 %>%
anti_join(df2)
unique2 <- df2 %>%
anti_join(df1)
# Join them together:
rbind(unique1, unique2)
#> Col1 Col2 Col3 Col4
#> 1 aaa 12 xxx 32b
#> 2 eed 12 xxx 54b
#> 3 wes 95 xxx 54r
#> 4 rtf 44 xxx 99q
#> 5 a 12 xxx 32b
#> 6 ee 12 xxx 54b
#> 7 ws 95 xxx 54r
#> 8 rt 44 xxx 99q
由reprex 包于 2021-03-16 创建(v0.3.0)
推荐阅读
- android - 在mac上运行集成测试时如何授予android权限?
- pip - 退出我的代理服务器时 pip 失去连接
- java - API 调用不会导致图像加载
- php - Laravel:自我 JOIN 的雄辩查询
- python - Python合并2个数据框,如图所示转置第二个表
- azure - 如何使用 ARM 模板/Azure CLI 将托管弹性云部署到 Azure?
- python - python pandas df.to_excel 不能正常工作只输出一行
- state - 如何将 doActivity 行为添加到 IBM Rhapsody 中的状态机状态?
- spring-batch - Spring Batch:HikariPool-1 - 连接不可用,请求在 30000 毫秒后超时
- caching - 使用具有复合主键的表将带有 Postgresql 的 Ignite Cache 配置为第 3 方持久性