在同一列

时间:2018-05-24 12:33:35

标签: dataframe datatable

假设我有以下数据表,其中有一列从2000年到2005年每个月的第一列,第二列会返回一些正面或负面的值。

我想要做的是,我想在同一个月但不同年份的两个观察点之间建立差异。 例如: 我想计算2001-01-01和2000-01-01之间的差异,并在我的2001-01-01日期所在的同一行的新列中写入值。

我想对我的所有观察结果以及那些在上一年没有价值的人进行比较,只需给予NA。

感谢您的时间和帮助:)

2 个答案:

答案 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