说我有以下数据
set.seed(123)
a <- c(rep(1,30),rep(2,30))
b <- rep(1:30)
c <- sample(20:60, 60, replace = T)
data <- data.frame(a,b,c)
data
现在我想提取数据:
对于a
的每个唯一值,提取/匹配b
值相同且c
值在+ -5
所以期望的输出应该产生:
答案 0 :(得分:6)
您想要比较 每个不同的b
组(因为它们在每个a
中都是唯一的),因此您应该按b
分组。也不可能按a
分组并在之间比较,因此可能的解决方案是
data %>%
group_by(b) %>%
filter(abs(diff(c)) <= 5)
使用data.table
包,这就像
library(data.table)
setDT(data)[, .SD[abs(diff(c)) <= 5], b]
或者
data[, if (abs(diff(c)) <= 5) .SD, b]
或者
data[data[, abs(diff(c)) <= 5, b]$V1]
在基础R中,它将类似于
data[with(data, !!ave(c, b, FUN = function(x) abs(diff(x)) <= 5)), ]