使用dplyr提取数据

时间:2015-01-23 07:41:59

标签: r dplyr

说我有以下数据

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

范围内的数据

所以期望的输出应该产生:

enter image description here

1 个答案:

答案 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)), ]