r - 寻找一种更简洁的方法来根据多变量组内的值差异过滤 data.table

标签 r data.table

我正在处理一个问题,我有两个分组变量和一个值。我只保留行,组中至少有两个值彼此接近。在这个例子中,我想要一组值彼此相差在 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

最佳答案

您可以使用 .Iif 来确定是否包括每个组(这里 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/

相关文章:

r - 如何监控应用功能的进度?

R 计算数据帧或数组中相邻相同值的数量

r - 将多个数据帧合并为一个扩展帧

r - 在 R 中对散点图进行聚类

r - 从输出方差分析中提取 P 值列(汽车包)

r - 在 R 中的不平衡面板数据中创建滞后变量

r - 按组总结应用涉及下一组的功能

r - 将字符串列拆分为年月日

r - 如何按组跨行获得重复的平均值

r - R 中的数据表 : the columns to join by must be specified using 'on=' argument error