【发布时间】:2017-07-14 03:50:16
【问题描述】:
我有一个data.frame:
df <- data.frame(region = rep(c("a","b","c","d"),12),
group = rep(c("A","A","A","B","B","B","C","C","C","D","D","D"),12),
num = rep(c(1:12),12))
我想按地区分组,然后按组分组,然后将 num 强制转换为时间序列对象 - 我正在这样做:
df %>%
group_by(region,group) %>%
mutate(num = ts(num,f=4))
它有效,但我收到一大堆警告,内容如下:
12: In mutate_impl(.data, dots) :
Vectorizing 'ts' elements may not preserve their attributes
实际上,我将其应用于大型 data.frame 并需要分解时间序列数据。在我的简化示例中,我正在使用 stl 这样做:
df %>%
group_by(region,group) %>%
mutate(num = ts(num,f=4)) %>%
mutate(trendcycle(stl(num, s.window = "per")))
但我收到一条错误消息:
Error in mutate_impl(.data, dots) :
Evaluation error: series is not periodic or has less than two periods.
我猜这与试图将数据强制转换为 ts 格式有关。问题是,我以前可以毫无问题地做到这一点。
我正在使用 R 3.4.1 和 dplyr 0.7.1
【问题讨论】:
-
我通过将 ts 转换包含在一个 mutate 调用中解决了这个问题,如下所示: df %>% group_by(region,group) %>% mutate(trendcycle(stl(ts(num,f =4), s.window = "每"))))
-
您可以将其作为解决方案发布