假设我有以下数据表,其中有一列从2000年到2005年每个月的第一列,第二列会返回一些正面或负面的值。
我想要做的是,我想在同一个月但不同年份的两个观察点之间建立差异。 例如: 我想计算2001-01-01和2000-01-01之间的差异,并在我的2001-01-01日期所在的同一行的新列中写入值。
我想对我的所有观察结果以及那些在上一年没有价值的人进行比较,只需给予NA。
感谢您的时间和帮助:)
答案 0 :(得分:2)
如果您的数据没有空白,您可以使用lag
功能:
library(dplyr)
df <- data.frame(Date = as.Date(sapply(2000:2005, function(x) paste(x, 1:12, 1, sep = "-"))),
Value = runif(72,0,1))
df$Difference <- df$Value-lag(df$Value, 12)
> df[1:24,]
Date Value Difference
1 2000-01-01 0.83038968 NA
2 2000-02-01 0.85557483 NA
3 2000-03-01 0.41463862 NA
4 2000-04-01 0.16500688 NA
5 2000-05-01 0.89260904 NA
6 2000-06-01 0.21735933 NA
7 2000-07-01 0.96691686 NA
8 2000-08-01 0.99877057 NA
9 2000-09-01 0.96518311 NA
10 2000-10-01 0.68122410 NA
11 2000-11-01 0.85688662 NA
12 2000-12-01 0.97282720 NA
13 2001-01-01 0.83614146 0.005751778
14 2001-02-01 0.07967273 -0.775902097
15 2001-03-01 0.44373647 0.029097852
16 2001-04-01 0.35088593 0.185879052
17 2001-05-01 0.46240321 -0.430205836
18 2001-06-01 0.73177425 0.514414912
19 2001-07-01 0.52017554 -0.446741315
20 2001-08-01 0.52986486 -0.468905713
21 2001-09-01 0.14921003 -0.815973080
22 2001-10-01 0.25427134 -0.426952761
23 2001-11-01 0.36032777 -0.496558857
24 2001-12-01 0.20862578 -0.764201423
答案 1 :(得分:-2)
我认为您应该尝试使用lubridate
包,对于处理日期非常有用。
https://cran.r-project.org/web/packages/lubridate/vignettes/lubridate.html