【发布时间】:2021-01-25 20:44:03
【问题描述】:
我的数据表如下所示:
data <- data.table(time = c(0, 1, 2, 3, 4, 5, 6, 7),
anom = c(0, 0, 1, 1, 1, 0, 0, 0),
gier = c(0, 0, 4, 9, 7, 0, 0, 0))
现在我正在计算按列anom 分组的列gier 的一些统计值,如下所示:
cols <- c("gier")
statFun <- function(x) list(mean = mean(x), median = median(x), std = sd(x))
statSum <- data[, unlist(lapply(.SD, statFun), recursive = FALSE), .SDcols = cols, by = anom]
这很好,但我想更进一步,根据 anom 组(0 和 1)的起点和终点输入 time 的起点和终点。所以最后我有一个新的时间序列,但只有time的起点和终点。所以最终结果应该是这样的:
res <- data.table(x.start = c(0, 2, 5),
x.end = c(1, 4, 7),
anom = c(0, 1, 0),
gier.mean = c(0, 6.666, 0),
gier.median = c(0, 7, 0),
gier.std = c(0, 2.516, 0))
如何做到这一点?
补充:有没有办法实现多列的结果,而不仅仅是像gier 这样的一列?例如,我能够做到这一点,但我不知道如何使用提到的列来扩展它。这样我计算统计值的列名至少有一个额外的列rn。
res <- data[, setDT(do.call(rbind.data.frame, lapply(.SD, statFun)), keep.rownames = TRUE), .SDcols = cols, by = anom]
【问题讨论】:
标签: r time-series data.table grouping