dataframe - 同一列中的值之间建立差异
问题描述
假设我有以下数据表,其中有一列返回从 2000 年到 2005 年每个月的第一天,第二列返回一些正值或负值。
我想要做的是,我想建立来自同一个月但来自不同年份的两次观察之间的差异。例如:我想计算 2001-01-01 和 2000-01-01 之间的差异,并将值写入 2001-01-01 日期所在的同一行的新列中。
我想为我所有的观察结果和那些在前一年没有价值可比的人做这件事,只回馈 NA。
感谢您的时间和帮助:)
解决方案
如果您的数据没有空白,您可以使用以下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
推荐阅读
- r - 如何堆叠在 R 中具有几乎完全相同范围的栅格
- regex - 将逗号分隔的字符串动态插入和更新到目标表的 Oracle 过程
- firebase - Flutter Firebase如何查询按列表索引排序的集合
- java - Intellij + Database Navigator 给我一个错误
- numerical-methods - 如何正确使用 Thomas-Algorithm 到热扩散方程?
- python - 如何将时间分成几个小时?
- python - 如何在 minmax 缩放后将 2d 数组转换为 1d 数组
- c# - 如何将字符串从 Angular 传递到 .NET Core WebAPI 并获得 json 作为回报?
- c# - 比较 SQL Server 中的两个字节数组
- python - Pandas - 通过一些列名操作将几个值扩展到新列