【发布时间】:2012-06-24 01:52:21
【问题描述】:
我正在尝试计算数据框中的经过时间,其中经过时间的“开始”值取决于数据框中因子列的值。 (为了简单的问题,我将时间值视为数字而不是时间对象 - 我的问题是关于拆分应用组合,而不是时间对象)。我的数据框如下所示:
df <- data.frame(id=gl(2, 3, 5, labels=c("a", "b")), time=1:5)
我想通过从每次减去每个因子水平的最短时间来计算经过的时间(尽管为了这个示例,我将只处理数值,而不是时间值)。所以我想用id分割数据框,从y列中的每个元素中减去最小y值,并返回一个带有转换值的向量(或数据框)。我想得到类似的结果:
> dfTrans
id time elapsed
a 1 0
a 2 1
a 3 2
b 4 0
b 5 1
对于 plyr 来说似乎是一项完美的任务,但我找不到简单的解决方案。
我能想到的最好的是
elapsed <- dlply(df, .(id), function(x) x$time - min(x$time))
elapsed_comb <- NA
for(i in 1:length(names(elapsed))) {
elapsed_comb <- c(elapsed_comb, elapsed[[i]])
}
elapsed_comb <- elapsed_comb[-1]
df$elapsed <- elapsed_comb
这很不雅,而且看起来很脆弱。肯定有更好的方法吗?
【问题讨论】: