【问题标题】:Differences between two data frames in R [closed]R中两个数据帧之间的差异[关闭]
【发布时间】:2014-01-04 13:12:12
【问题描述】:

我有两个数据框,每个有 9 列,DF2 是 DF1 的子集。我正在尝试创建第三个数据框,其中仅包含 DF2 中不存在的 DF1 内容。

最有效的方法是什么?我可以写一个while循环,但我想知道是否有另一种方式(除了sqldf,由于某种原因我无法将它上传到我的R Studio)我可以做到这一点?

【问题讨论】:

  • 您是否必须使用所有列查找重复项?或者是否有任何唯一的行标识符或可以用作标识符的几个变量的组合?
  • 你应该提供一个可重现的例子,并添加预期的结果,否则答案不会很准确!

标签: r merge


【解决方案1】:

以下可以工作(直接来自Identify records in data frame A not contained in data frame B

fun.12 <- function(x.1,x.2,...){
     x.1p <- do.call("paste", x.1)
     x.2p <- do.call("paste", x.2)
     x.1[! x.1p %in% x.2p, ]
}

DF1 <- data.frame(a=c(1,2,3,4,5), b=c(1,2,3,4,5))
DF2 <- data.frame(a=c(1,1,2,3,4), b=c(1,1,99,3,4))
fun.12(DF1, DF2)

#   a b
# 2 2 2
# 5 5 5

【讨论】:

  • 谢谢。我应该更清楚,DF2 是 DF1 的部分子集。 DF23 是使用 DF1 和另一个 DF 的合并制作的。长话短说,我试图找出两个数据框共享哪些行,哪些行不同。我通过将 DF1 与另一个 DF 合并来制作 DF2。 DF2 是他们共享的。现在我正在尝试找出哪些行不同。
  • 好的,请在原帖中说明。我发布的代码返回所有在 DF1 中但不在 DF2 中或在 DF2 中但不在 DF1 中的行。如果 DF2 实际上不是 DF1 的子集,那么此代码不会执行您想要的操作。
  • 好的,我更新了我的回复。看起来这实际上是 stackoverflow.com/questions/7728462/… 的副本
猜你喜欢
  • 2020-05-16
  • 1970-01-01
  • 2019-06-19
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 1970-01-01
  • 2015-04-02
相关资源
最近更新 更多