我正在处理一个问题,我有两个分组变量和一个值。我只保留行,组中至少有两个值彼此接近。在这个例子中,我想要一组值彼此相差在 10 以内的组。
下面是我最初尝试的方法,关于制作标志变量的一些事情让我觉得我是在以某种迂回的方式做这件事,我只是想知道是否有更清晰、更有目的性的方法来在数据中做这样的事情。 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
最佳答案
您可以使用 .I
和 if
来确定是否包括每个组(这里 want
匹配您的最终 dt
)
dt <- unique(dt)
want <- dt[dt[, if(any(diff(z) <= 11)) .I, .(x, y)]$V1]
关于r - 寻找一种更简洁的方法来根据多变量组内的值差异过滤 data.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57512417/