r - 从一个 data.frame 中选择第二个 data.frame 中不存在的行

标签 r dataframe merge compare set-difference

我有两个数据框:

a1 <- data.frame(a = 1:5, b=letters[1:5])
a2 <- data.frame(a = 1:3, b=letters[1:3])

我想找到 a1 有而 a2 没有的行。

是否有用于此类操作的内置函数?

(p.s:我确实为此编写了一个解决方案,我只是好奇是否有人已经编写了更精巧的代码)

这是我的解决方案:

a1 <- data.frame(a = 1:5, b=letters[1:5])
a2 <- data.frame(a = 1:3, b=letters[1:3])

rows.in.a1.that.are.not.in.a2  <- function(a1,a2)
{
    a1.vec <- apply(a1, 1, paste, collapse = "")
    a2.vec <- apply(a2, 1, paste, collapse = "")
    a1.without.a2.rows <- a1[!a1.vec %in% a2.vec,]
    return(a1.without.a2.rows)
}
rows.in.a1.that.are.not.in.a2(a1,a2)

最佳答案

sqldf提供了一个很好的解决方案

a1 <- data.frame(a = 1:5, b=letters[1:5])
a2 <- data.frame(a = 1:3, b=letters[1:3])

require(sqldf)

a1NotIna2 <- sqldf('SELECT * FROM a1 EXCEPT SELECT * FROM a2')

以及两个数据框中的行:

a1Ina2 <- sqldf('SELECT * FROM a1 INTERSECT SELECT * FROM a2')

新版本的dplyr有一个函数anti_join,专门用于此类比较

require(dplyr) 
anti_join(a1,a2)

semi_join 过滤 a1 中同时也在 a2 中的行

semi_join(a1,a2)

关于r - 从一个 data.frame 中选择第二个 data.frame 中不存在的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3171426/

相关文章:

php - MySQL 将多个查询合并为一个

r - 如何将 .csv 文件导入 R?

r - 将日期时间从 Excel 转换为 R

python - 如何在两个 pandas 数据框之间应用函数

php - 合并不同列表的搜索结果并按日期排序

python - 合并相同标签进行计数

r - 检查是否有任何值在范围内

mysql - 无法连接到数据库错误 - R+RMySQL/XAMPP

python - 3 个数据框和 3 个规则正在运行以将数据插入另一个数据框 - 没有公共(public)列 - 大数据

python - 数据透视表不使用数据框中的日期时间索引创建