2017-09-05 7 views
2

私は、1997年から1616年の間に数か月にわたり毎日の降水量を持つデータフレームを持っています。次に例を示します。tidyverseを使用して変動係数をグループ化して要約する

df<- data.frame(year= as.character(c("1997", "1997","1997","1997","1997","1997","1998","1998","1998")),month= as.character(c("1", "1","1","2","2","2","1","1","1")),cont_month= as.character(c("1", "1","1","2","2","2","13","13","13")),precip= as.numeric(c(5, 2,4,5,6,2,1,3,7))) 

私は各Cont_Monthサブセットの日降水量の変動係数を計算します。私はlibrary(raster)パッケージを使用して、cv()ファンクションを使用しています。新しいデータフレームは次のようになります。私は以下のコードでトラブルを抱えています

output<- data.frame(year= as.character(c("1997", 
"1997","1998")),month= as.character(c("1", "2","1")),cont_month= 
as.character(c("1", "2","13")),cv= as.numeric(c(41.6, 48.03,83.31)) 

、それが成功しcont_month変数によって毎日precipをグループ化されていません。代わりに、同じ値がprecip列で繰り返されます。私のエラーは何ですか?

output<- 
df %>% 
group_by(year, month,cont_month)%>% 
    summarise(cv= cv(df$precip)) 
+1

'$'を使わないでください。 'summarize(cv = cv(降雨)) 'を呼び出すだけです。これがパイプの全体のポイントなので、ソースオブジェクトを参照し続ける必要はありません。 – thelatemail

答えて

2

試してみてください。

library(dplyr) 
library(raster) 

out <- 
    df %>% 
    group_by(year, month,cont_month)%>% 
    summarise(cv= cv(precip)) 

out 
# A tibble: 3 x 4 
# Groups: year, month [?] 
    year month cont_month  cv 
    <fctr> <fctr>  <fctr> <dbl> 
1 1997  1   1 41.65978 
2 1997  2   2 48.03845 
3 1998  1   13 83.31956 

あなたが本当にデータフレームを参照する必要がある場合は、ここであなたがこれを必要としませんが、あなたは、summarise(cv= cv(.$precip))のように、たとえば、.を使用することができます。これは、dataを引数とする関数(たとえば、lm、その最初の引数はデータフレームではありません)に関連します。

今後この問題が発生しないようにするには、何が起こったのかを理解すると便利です。要約する呼び出しでdf$precipを参照しているため、関数cvは、全体のベクトルdf$precipであり、グループ単位の要素とは対照的である。

関連する問題