Say I have the following data
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
Run Code Online (Sandbox Code Playgroud)
Now I want to extract data whereby:
For each unique value of a, extract/match data where the b value is the same and the c value is within a limit of +-5
so a desired output should produce:

您希望在每个不同的b组内进行比较(因为它们在每个组中都是唯一的a),因此您应该分组b.它们也不可能在它们之间进行分组a和比较,因此可能的解决方案是
data %>%
group_by(b) %>%
filter(abs(diff(c)) <= 5)
Run Code Online (Sandbox Code Playgroud)
与data.table包这将是类似的
library(data.table)
setDT(data)[, .SD[abs(diff(c)) <= 5], b]
Run Code Online (Sandbox Code Playgroud)
要么
data[, if (abs(diff(c)) <= 5) .SD, b]
Run Code Online (Sandbox Code Playgroud)
要么
data[data[, abs(diff(c)) <= 5, b]$V1]
Run Code Online (Sandbox Code Playgroud)
在基地R它会是这样的
data[with(data, !!ave(c, b, FUN = function(x) abs(diff(x)) <= 5)), ]
Run Code Online (Sandbox Code Playgroud)