小编EnF*_*iFa的帖子

如何缩小/过滤每组数据?

我有一个包含一些列和分组变量的数据集。我想减少每个分组变量的数据集、max_n每个分组级别的行数。同时我想保留其他列的分布。我的意思是我想保留数据过滤后的最低值a和最高值。b这就是为什么我使用下面的函数setorderv

library(data.table)

set.seed(22)
n=20
max_n = 6
dt <- data.table("grp"=sample(c("a", "b", "c"), n, replace=T),
                 "a"=sample(1:10, n, replace=T),
                 "b"=sample(1:20, n, replace=T),
                 "id"=1:n)
setorderv(dt, c("grp", "a", "b"))
dt
Run Code Online (Sandbox Code Playgroud)

我的临时解决方案不太优雅,也不太像 data.table 那样,如下所示:

dt_new <- data.table()
for (gr in unique(dt[["grp"]])) {
  tmp <- dt[grp == gr, ]
  n_tmp <- nrow(tmp)
  if (n_tmp > max_n) {
    tmp <- tmp[as.integer(seq(1, n_tmp, length.out=max_n)),]
  }
  dt_new <- rbindlist(list(dt_new, tmp))
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方法来做到这一点? 编辑:我想要一个 data.table 解决方案。

现在的代码太庞大

r filter data.table group

4
推荐指数
1
解决办法
76
查看次数

标签 统计

data.table ×1

filter ×1

group ×1

r ×1