2017-09-05 82 views
2

我有一個數據框,每年的降水量在1997-2016年之間。下面是一個例子:使用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(precip))' - 這就是管道的全部要點,所以你不必再引用源對象。 – 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,而不是它的分組元素。