r语言 - 比较两个数据帧以查找范围内的缺失值



我有以下 2 个数据帧:

a1 <- data.frame(count = 1:10, site = "a")
a2 <-data.frame(count = 2:8, site = "b")
a4 <- data.frame(count = c(3,6,7,9), site = "a")
a5 <- data.frame(count = c(3,5,7), site = "b")
data1 <- rbind(a1, a2)
data2 <- rbind(a4, a5)

我想根据"count"列生成一个数据帧,列出 data1 中在 data2 中找不到的行。有很多方法可以做到这一点,例如:

method1 <- rbind(data1, data2)
method1[!duplicated(method1,fromLast = FALSE)&!duplicated(method1,fromLast = TRUE),] 

其中返回:

   count site
1      1    a
2      2    a
4      4    a
5      5    a
8      8    a
10    10    a
11     2    b
13     4    b
15     6    b
17     8    b

或者像这样的东西(作为一个附带问题,这行代码不能完美运行,我将不胜感激任何见解,因为我已经在其他几个数据处理步骤中使用此命令(:

method2 <- data1[!data1$count %in% data2$count,]

无论如何,主要问题是:如何仅在 data2 中的计数范围内返回缺失的行? 即,我希望输出为:

   count site
4      4    a
5      5    a
8      8    a
13     4    b
15     6    b

我有数百个数据帧,每个数据帧都包含许多具有高度可变范围的站点。

这是我第一次发帖,感谢您抽出宝贵时间阅读我的问题,我感谢任何建议的解决方案。

我认为他做了你想要的"根据"计数"列列出 data1 中在 data2 中找不到的行:

method2 <- data1[!data1$count %in% data2$count,]
result <- subset(method2, method2$count > min(data2$count) & 
                 method2$count < max(data2$count))

您的代码

method2 <- data1[!data1$count %in% data2$count,]

做了它应该做的事情,但似乎您不仅想根据count排除变量,而且要基于countsite的组合......?

编辑:好的,所以你似乎也想考虑网站,而不仅仅是计数。在这种情况下,这是您想要的吗?

method2 <- data1[! interaction(data1$count, data1$site) %in%
                     interaction(data2$count,data2$site),]
result <- subset(method2, method2$count > min(data2$count) & 
               method2$count < max(data2$count))

编辑2:现在,这些值在每个站点定义的范围内。

method2[apply(method2, 1, function(x)  
                 as.numeric(x["count"]) > min(data2$count[data2$site == x["site"]]) &
                 as.numeric(x["count"]) < max(data2$count[data2$site == x["site"]]) )
        ,]
你能

做这样的事情吗:

data1[ setdiff(data1$count, data2$count),]

这不会给出 data1 中不在 data2 中的行吗?

相关内容

  • 没有找到相关文章

最新更新