我脑子里想要为我的问题寻找好的搜索词。我相信这有一个非常简单的解决方案。
我的数据如下:
f = data.frame(
date = c(
as.POSIXct('2012-01-01'),
as.POSIXct('2012-02-01'),
as.POSIXct('2012-03-01')
),
val = c(
22,
45,
67
)
)
> f
date val
1 2012-01-01 22
2 2012-02-01 45
3 2012-03-01 67
我想要找到的是从一个日期到另一个日期的“val”的绝对变化(“val”是在每个月的第一天拍摄的)。所以我的最终结果应该是这样的
> new_f
date val change
1 2012-01-01 22 NA
2 2012-02-01 45 23 #(45-22)
3 2012-03-01 67 22 #(67-45)
如何计算这些变化值?
答案 0 :(得分:4)
使用dplyr
,您还可以使用lag
功能代替diff
。这样做的好处是它已包含NA
。
require(dplyr)
f %>% mutate(change = val-lag(val))
## date val change
## 1 2012-01-01 22 NA
## 2 2012-02-01 45 23
## 3 2012-03-01 67 22
答案 1 :(得分:2)
您可以将diff
用于此目的:
f$change <- c(NA, diff(f$val))
f
## date val change
## 1 2012-01-01 22 NA
## 2 2012-02-01 45 23
## 3 2012-03-01 67 22
由于diff
将输入向量缩短1,您可以使用c()
答案 2 :(得分:1)
如果您确定您的日期是唯一且已订购:
f$change = c(NA, tail(f$val,-1)-head(f$val,-1))