Добавление переменной тренда времени в функцию ddply

У меня возникают трудности при добавлении переменной тренда времени в функцию 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

Теперь я также хочу включить коэффициент временного тренда для каждого идентификатора (т. Е. Цену, наклоняющуюся для идентификатора 1, снижающуюся для идентификатора 2), но у меня возникают трудности с включением его в функцию ddply сверху. Я ценю любую помощь.

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
Другие вопросы по тегам