我有这样的数据集
ID Date Total
1 2002-03-12 4.98
1 2003-06-06 5.49
2 2005-10-10 2.62
2 2010-04-07 2.02
2 2012-04-03 2.40
2 2014-04-10 2.45
我正在尝试通过每个ID计算Total(t + 1)和Total(t)值之间的差。
最终的预期数据集应如下
ID Date Total Delta
1 2002-03-12 4.98 NA
1 2003-06-06 5.49 0.51 = 5.49 - 4.98
2 2005-10-10 2.62 NA
2 2010-04-07 2.02 -0.6 = 2.02 - 2.62
2 2012-04-03 2.40 0.38 = 2.40 - 2.02
2 2014-04-10 2.45 0.05 = 2.45 - 2.40
我在下面尝试过此方法
library(dplyr)
df %>%
group_by(Id, Date) %>%
arrange(Id, Date) %>%
mutate(
Delta = (Total - lag(Total, 1))
)
这不起作用,我在Delta列中看到NA。任何建议或帮助深表感谢。谢谢。
使用data.table
和diff
library(data.table)
dt <- as.data.table(read.table('clipboard', header = T))
> dt
ID Date Total
1: 1 2002-03-12 4.98
2: 1 2003-06-06 5.49
3: 2 2005-10-10 2.62
4: 2 2010-04-07 2.02
5: 2 2012-04-03 2.40
6: 2 2014-04-10 2.45
> dt[, delta := c(0, diff(x = Total, lag = 1))]
> dt
ID Date Total delta
1: 1 2002-03-12 4.98 0.00
2: 1 2003-06-06 5.49 0.51
3: 2 2005-10-10 2.62 -2.87
4: 2 2010-04-07 2.02 -0.60
5: 2 2012-04-03 2.40 0.38
6: 2 2014-04-10 2.45 0.05
我在开头(c(0, diff ...)
)后面加了0,因为没有什么可计算出差值。您可以将其设置为NA
或其他一些值。第3行没有像问题中那样显示NA值。