随时间/绝对数字的变化

时间:2015-01-06 09:00:45

标签: r

我脑子里想要为我的问题寻找好的搜索词。我相信这有一个非常简单的解决方案。

我的数据如下:

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)

如何计算这些变化值?

3 个答案:

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

将其与开头的NA连接起来

答案 2 :(得分:1)

如果您确定您的日期是唯一且已订购:

f$change = c(NA, tail(f$val,-1)-head(f$val,-1))