【发布时间】:2020-03-03 18:26:53
【问题描述】:
当按涉及列的表达式(例如DT[...,.SD[c(1,.N)],by=expression(col)])进行分组时,我想将col 的值保留在.SD 中。
例如,在下面我将a 的余数除以 3 进行分组,并在每组中保留第一个和最后一个观察值。但是,a 不再存在于 .SD 中
f <- function(x) x %% 3
Q <- data.table(a = 1:20, x = rnorm(20), y = rnorm(20))
Q[, .SD[c(1., .N)], by = f(a)]
f x y
1: 1 0.2597929 1.0256259
2: 1 2.1106619 -1.4375193
3: 2 1.2862501 0.7918292
4: 2 0.6600591 -0.5827745
5: 0 1.3758503 1.3122561
6: 0 2.6501140 1.9394756
想要的输出就好像我已经完成了以下操作
Q[, f := f(a)]
tmp <- Q[, .SD[c(1, .N)], by=f]
Q[, f := NULL]
tmp[, f := NULL]
tmp
a x y
1: 1 0.2597929 1.0256259
2: 19 2.1106619 -1.4375193
3: 2 1.2862501 0.7918292
4: 20 0.6600591 -0.5827745
5: 3 1.3758503 1.3122561
6: 18 2.6501140 1.9394756
有没有办法直接做到这一点,而无需创建新变量并创建新的中间data.table?
【问题讨论】:
标签: r data.table