我有一个1997年至2016年间每月降水量的数据框。这是一个例子:
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
子集的每日降水量的变异系数。我使用cv()
包使用函数library(raster)
。新数据框应如下所示:
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))
我在使用下面的代码时遇到问题,但它未能通过precip
变量成功对每日cont_month
进行分组。而是在precip
列中重复相同的值。知道我的错误是什么吗?
output<-
df %>%
group_by(year, month,cont_month)%>%
summarise(cv= cv(df$precip))
答案 0 :(得分:3)
尝试:
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
,而不是它的分组元素。