[英]R - Getting first N-1 rows per group
这是一个用例,其中我们给数据加上了id的时间戳(例如,每个对象随时间推移有多个观察值),并且我们想使用所有先前的度量来预测数据集中的最后一个。
这与以下问题有关: 如何在数据框中选择分组变量中的第一行和最后一行?
目前,我正在使用data.table包,该包使用链接的问题中的解决方案非常有效地选择每个组的第一行或最后一行。
当我尝试选择前N_g-1行(其中N_g是当前组中的行数)时,查询将花费很长时间。 有人知道做这样的事情的有效方法吗? 这是我目前正在使用的:
firstn_elements <- dt[, .SD[1:(.N-1)], by=subject_id]
我们可以使用.I
更快地完成此操作,以提取行索引。
dt[dt[, .I[1:(.N-1)], by = subject_id]$V1]
set.seed(24)
dt <- data.table(subject_id = sample(1:100000, 1e7, replace=TRUE), value = rnorm(1e7))
system.time(dt[, .SD[1:(.N-1)], by=subject_id])
# user system elapsed
# 45.89 17.92 65.00
system.time(dt[dt[, .I[1:(.N-1)], by = subject_id]$V1])
# user system elapsed
# 1.53 0.19 1.13
包括@ JoshO'Brien的方法
system.time(dt[dt[, -.I[.N], by = subject_id]$V1])
# user system elapsed
# 0.69 0.04 0.55
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.