R 正在寻找基于多变量组中的值差异筛选data.table的更干净的方法

R 正在寻找基于多变量组中的值差异筛选data.table的更干净的方法,r,data.table,R,Data.table,我正在研究一个问题,其中我有两个分组变量和一个值。我只保留行中至少有两个组中的值在值上彼此接近。在本例中,我希望组之间的一组值在10以内 下面是我最初尝试的内容,关于创建标志变量的内容让我觉得我是在以某种迂回的方式进行操作,我只是想知道在data.table中是否有一种更干净、更实用的方法来执行类似的操作。谢谢大家! x和y是类别,z是值 library(data.table) set.seed(123) dt <- data.table( x = sample(LETTERS,

我正在研究一个问题,其中我有两个分组变量和一个值。我只保留行中至少有两个组中的值在值上彼此接近。在本例中,我希望组之间的一组值在10以内

下面是我最初尝试的内容,关于创建标志变量的内容让我觉得我是在以某种迂回的方式进行操作,我只是想知道在data.table中是否有一种更干净、更实用的方法来执行类似的操作。谢谢大家!

x和y是类别,z是值

library(data.table)
set.seed(123)


dt <- data.table(
  x = sample(LETTERS, 1000, T),
  y = sample(letters, 1000, T),
  z = sample(100, 1000, T),
  key = tail(letters, 3)
)

dt <- unique(dt)
dt <- dt[dt[, .(flag = any(diff(z) <= 11)), .(x, y)], on = c("x", "y")][(flag)]
dt[, flag := NULL]
dt
库(data.table)
种子集(123)

dt您可以将
.I
if
一起使用,以确定是否包括每组(此处
want
与您的最终
dt
匹配)

dt你可以

res <- dt[, if (.N > 1L && min(diff(z)) <= 11) .SD, by=.(x, y)]

您可以直接将聚合应用于数据,例如,
dt[,flag:=any(diff(z))即将发布类似但不干净的内容:
dt[dt[,rep(any)(diff(z))
res <- dt[, if (.N > 1L && min(diff(z)) <= 11) .SD, by=.(x, y)]
library(data.table)
set.seed(123)
dt <- data.table(
  x = sample(LETTERS, 1000, T),
  y = sample(letters, 1000, T),
  z = sample(100, 1000, T),
  key = tail(letters, 3)
)
dt <- unique(dt)