在ddply函数中添加时间趋势变量
Adding time trend variable in ddply function
我在 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 函数中。感谢您的帮助。
您可以使用:
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
我在 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 函数中。感谢您的帮助。
您可以使用:
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