使用 dplyr 提取数据
extracting data using 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
、extract/match 数据的每个唯一值,其中 b
值相同且 c
值在 +-5[ 的限制内=15=]
所以期望的输出应该产生:
您想在 中比较 每个不同的 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)), ]
假设我有以下数据
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
、extract/match 数据的每个唯一值,其中 b
值相同且 c
值在 +-5[ 的限制内=15=]
所以期望的输出应该产生:
您想在 中比较 每个不同的 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)), ]