【问题标题】:function to find common rows between more than two data frames in R在 R 中查找两个以上数据帧之间的公共行的函数
【发布时间】:2013-06-25 23:46:28
【问题描述】:

我有 4 个数据框,并且想查找其某一列中的值在任何其他数据框中都不存在的行。我写了这个函数:

#function to test presence of $Name in 3 other datasets
common <- function(a, b, c, d) {
  is.B <- is.numeric(a$Name %in% b$Name) == 1
  is.C <- is.numeric(a$Name %in% c$Name) == 1
  is.D <- is.numeric(a$Name %in% d$Name) == 1
  t <- as.numeric(is.B & is.C & is.D)
  t
}

但是,输出总是 t = 0。这意味着它告诉我在任何数据集中都没有唯一的行,即使数据帧的行数非常不同。由于任何数据框中都没有重复的行,因此对于最大数据集中的至少一些行,我应该得到 t = 1。有人能弄清楚我做错了什么吗?

【问题讨论】:

  • 你为什么使用is.numeric(数字测试)?你的意思是as.numeric?你甚至不需要那个;为什么不只使用逻辑值?
  • 设置类似all(a$Name %in% b$Name, a$Name %in% c$Name, a$Name %in% d$Name).
  • @HongOoi 感谢您指出这一点,这是我的错误。
  • @Thomas 这是一个有趣的解决方案!

标签: r dataframe rows


【解决方案1】:

重写:

common <- function(a, b, c, d)
{
    Name <- a$Name
    inB <- Name %in% b$Name
    inC <- Name %in% c$Name
    inD <- Name %in% d$Name
    which(!(inB | inC | inD))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2015-07-20
    • 2019-08-15
    • 1970-01-01
    相关资源
    最近更新 更多