使用tidyverse对变异系数进行分组汇总
Using tidyverse to group and summarise the coefficient of variation
我有一个数据框,其中包含 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))
我在使用下面的代码时遇到问题,它没有成功地通过 cont_month
变量对每日 precip
进行分组。而是在 precip
列中重复相同的值。知道我的错误是什么吗?
output<-
df %>%
group_by(year, month,cont_month)%>%
summarise(cv= cv(df$precip))
尝试:
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
当你真的需要引用一个dataframe时,你可以使用.
,例如summarise(cv= cv(.$precip))
,虽然这里你不需要这个。这与将 data
作为参数的函数更相关(例如 lm
,其第一个参数不是数据帧)。
为防止将来出现此问题,了解发生的情况可能会有所帮助:在您对 summarise 的调用中,您引用了 df$precip
,因此函数 cv
使用正是您作为输入提供的内容,即整个向量 df$precip
,而不是它的分组元素。
我有一个数据框,其中包含 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))
我在使用下面的代码时遇到问题,它没有成功地通过 cont_month
变量对每日 precip
进行分组。而是在 precip
列中重复相同的值。知道我的错误是什么吗?
output<-
df %>%
group_by(year, month,cont_month)%>%
summarise(cv= cv(df$precip))
尝试:
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
当你真的需要引用一个dataframe时,你可以使用.
,例如summarise(cv= cv(.$precip))
,虽然这里你不需要这个。这与将 data
作为参数的函数更相关(例如 lm
,其第一个参数不是数据帧)。
为防止将来出现此问题,了解发生的情况可能会有所帮助:在您对 summarise 的调用中,您引用了 df$precip
,因此函数 cv
使用正是您作为输入提供的内容,即整个向量 df$precip
,而不是它的分组元素。