在ddply函数中添加时间趋势变量

时间:2018-10-16 14:55:19

标签: r plyr trend

我很难在ddply函数中添加时间趋势变量,

这是简化的代码:

id <- c(1,1,1,2,2,2)
price <- c(1,2,3,2,1,0)

df <- data.frame(id, price)

price_trends <- ddply(df, ~id, summarise, 
      mean_price = mean(price), 
      sd_price = sd(price))
price_trends

现在,我还想在每个id中包含一个时间趋势系数(即,id为1的价格倾斜,id 2为下降的价格),但是我很难从上面将其包含在ddply函数中。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您可以使用:

slope <- function(x) (tail(x,1)-x[1])/length(x)
price_trends <- ddply(df, ~id, summarise, 
                      mean_price = mean(price), 
                      sd_price = sd(price),
                      trend = price %>% slope() %>% round(0))
> price_trends
  id mean_price sd_price trend
1  1          2        1     1
2  2          1        1    -1

请注意,如果您删除了最后一个round(0),则实际上会得到斜率。此外,您可以通过函数定义任何感兴趣的系数。您也可以像这样直接在ddply内部包含函数:

price_trends <- ddply(df, ~id, summarise, 
                      mean_price = mean(price), 
                      sd_price = sd(price),
                      trend = ((tail(price,1)-price[1])/length(price)) %>% round(0)
                      )
price_trends