首页 > 解决方案 > 同一列中的值之间建立差异

问题描述

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

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

我想为我所有的观察结果和那些在前一年没有价值可比的人做这件事,只回馈 NA。

感谢您的时间和帮助:)

标签: dataframedatatable

解决方案


如果您的数据没有空白,您可以使用以下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

推荐阅读