gpt4 book ai didi

r - R中行的setdiff

转载 作者:行者123 更新时间:2023-12-05 00:41:29 25 4
gpt4 key购买 nike

对于df.1df.2这两个数据框,我想知道df.1的行不在df.2,即已经消失或改变的行。这是一个例子:

df.1 = cbind.data.frame(a = 1:4, b = 2:5, c = 99:102)
> df.1
a b c
1 1 2 99
2 2 3 100
3 3 4 101
4 4 5 102

df.2 = cbind.data.frame(a = c(1:3,7), b = c(3,3:4,9), c=c(99:100, 102, 105))
> df.2
a b c
1 1 3 99
2 2 3 100
3 3 4 102
4 7 9 105

所以这里我想要的输出是 df.1 的第 1,3 和 4 行:

> desired.output
a b c
1 1 2 99
3 3 4 101
4 4 5 102

如果 df.1df.2 是向量,我可以使用 setdiff(df.1, df.2) 但我没有看不到将其应用于数据帧的简单/优雅的方式。

有没有比我想到的这些解决方法更优雅的方法:

  • 逐列比较 df.1df.2,然后从所有列中取并集
  • 使数据框成为所有行的列表,然后使用 setdiff 并转换回数据框

最佳答案

我认为,最优雅(语法糖和非常高效)是使用 data.table 包:

library(data.table)
setDT(df.1)[!df.2, on = names(df.1)]
# a b c
# 1: 1 2 99
# 2: 3 4 101
# 3: 4 5 102

请注意,这是不同的:

setDT(df.2)[!df.1, on = names(df.2)]
# a b c
# 1: 1 3 99
# 2: 3 4 102
# 3: 7 9 105

关于r - R中行的setdiff,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32760341/

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