我有以下2个data.frames:
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)
我想生成一个数据帧,列出data1中基于“count”列在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
我有数百个数据框,每个数据框包含许多具有高度可变范围的网站。
这是我第一次发帖,感谢您花时间阅读我的问题,并感谢任何建议的解决方案。
答案 0 :(得分:1)
我认为他做了你想做的事情&#34;根据列&#34;列出&#34;列出data1中没有找到的行#34;
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
排除变量,而且要基于count
和site
的组合... ?
编辑:好的,所以你似乎也想考虑网站,而不仅仅是计算。在这种情况下,这是你想要的吗?
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))
EDIT2:现在这些值都在每个站点定义的范围内。
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"]]) )
,]
答案 1 :(得分:0)
你可以这样做:
data1[ setdiff(data1$count, data2$count),]
这不会给data1中不在data2中的行吗?