【问题标题】:year-over-year percentage change in RR的同比百分比变化
【发布时间】:2015-01-20 07:44:57
【问题描述】:

虽然我发现了几个类似的问题,但我在 base R 中找不到解决问题的简单方法。 我想计算一组数据(这里是 y 值)的同比百分比变化,并将这个“Delta”系列作为新列添加到我的数据框中。

例如:

>x = c(2000,2001,2002,2003,2004,2005,2006)   
>y = c(100,104,106,108,112,115,121)   
>df = data.frame(x,y)

如果我通过读取 .csv 文件来加载数据该怎么办?我必须将此数据转换为数据框吗?

【问题讨论】:

  • 通过使用read.csv/read.table,您将直接获得data.frame。无需任何转换。根据您的df,预期输出是什么?
  • 您在寻找y[-1]/y[-7]吗?或者更一般的df$y[-1]/df$y[-nrow(df)]
  • 嗯,非常感谢您的回答。我正在寻找类似 @​​987654327@ 的东西,但如果我这样做 transform df = (df, new.col = c(NA, df$y[-1]/df$y[-nrow(df)]-1)) 我会收到一条错误消息:Error: unexpected symbol in "transform df"
  • 你转换需要改变transform(df, new.col=c(NA, df$y[-1]/df$y[-nrow(df)]-1))
  • 显然我没有包“data.table”

标签: r time-series


【解决方案1】:

data.table_1.9.5 引入了新函数shift,默认为type='lag'n=1L。如果需要更改,您可以指定这些参数。 setDTdata.frame 转换为data.table,根据条件(y/shift(y)...)创建一个新列(:=

library(data.table)
setDT(df)[, new.col := y/shift(y) - 1]

或者在基础 R 中(来自@David Arenburg 的 cmets)

transform(df, new.col=c(NA,y[-1]/y[-nrow(df)]-1))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多