2017-07-14 14 views
0

私はdata.frame持っている:GROUP_BYと時系列dplyr rに強制変換は

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 

を現実にしますta.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形式。問題は、私はこれまでこれを問題なく行うことができたことです。私は攻撃することでここに来

df %>% 
group_by(region,group) %>% 
mutate(trendcycle(stl(ts(num,f=4), s.window = "per"))) 

私は、私は以下のように1つのmutate呼び出しにTS変換を含めることによって、問題を回避得ている0.7.1

+0

私は、ts変換を次のように1つの突然変異呼び出しに含めることで問題を回避しました。 df%>% group_by(地域、グループ)%>% mutate(trendcycle(stl(ts(num、f = 4) )、s.window = "per"))))) –

+0

これを解決策として投稿できます – akrun

答えて

0

R 3.4.1とdplyrを使用していますdata.tableに問題:

df1 <- setDT(df)[,trendcycle(stl(ts(num, frequency = 4), s.window ="per")), by = .(region,group)] 

速かったが、私のプログラムはtidyverse構文に従い、私は

一貫性のあるものを保管しております
関連する問題