在动物园的 yearmon 上使用 dplyr 摘要函数
Using dplyr summary function on yearmon from zoo
我有一个数据框,其中包含与年份和月份相关的值。我使用 zoo
包中的 yearmon
class 来存储年月信息。
我的目标是计算同年同月的这些值的平均值。但是,使用 dplyr
似乎给我一个错误。
复制下面的变量tst
> str(tst)
'data.frame': 20 obs. of 2 variables:
$ n : int 23 24 26 27 26 23 19 19 22 22 ...
$ ym:Class 'yearmon' num [1:20] 2004 2004 2004 2004 2004 ...
> dput(tst)
structure(list(n = c(23L, 24L, 26L, 27L, 26L, 23L, 19L, 19L,
22L, 22L, 22L, 22L, 26L, 26L, 19L, 22L, 26L, 25L, 22L, 18L),
ym = structure(c(2004, 2004, 2004, 2004, 2004.08333333333,
2004.08333333333, 2004.08333333333, 2004.08333333333, 2004.08333333333,
2004.16666666667, 2004.16666666667, 2004.16666666667, 2004.16666666667,
2004.25, 2004.25, 2004.25, 2004.25, 2004.33333333333, 2004.33333333333,
2004.33333333333), class = "yearmon")), .Names = c("n", "ym"
), row.names = c(NA, 20L), class = "data.frame")
错误是
> tst %>% group_by(ym) %>% summarize(ave=mean(n))
Error: column 'ym' has unsupported type : yearmon
有没有办法让它同时适用于 zoo
和 dplyr
,或者我必须分别对我的年月进行编码?
如错误所述,dplyr
不支持 class。我们可以将 ym
更改为 dplyr
支持的 class,它将起作用
library(dplyr)
tst %>%
group_by(ym = as.numeric(ym)) %>%
summarise(ave = mean(n))
# ym ave
#1 2004.000 25.00000
#2 2004.083 21.80000
#3 2004.167 23.00000
#4 2004.250 23.25000
#5 2004.333 21.66667
或者如@G.Grothendieck在评论中提到的,我们可以将group_by
替换为group_by(ym = as.Date(ym)
或group_by(ym = format(ym, "%Y-%m"))
也许你在dplyr 0.4.3还没有发布的时候问过这个问题,我发现升级到这个版本就消除了这个错误。
(一位同事正在使用 dplyr 0.4.2,它也有效:)
我有一个数据框,其中包含与年份和月份相关的值。我使用 zoo
包中的 yearmon
class 来存储年月信息。
我的目标是计算同年同月的这些值的平均值。但是,使用 dplyr
似乎给我一个错误。
复制下面的变量tst
> str(tst)
'data.frame': 20 obs. of 2 variables:
$ n : int 23 24 26 27 26 23 19 19 22 22 ...
$ ym:Class 'yearmon' num [1:20] 2004 2004 2004 2004 2004 ...
> dput(tst)
structure(list(n = c(23L, 24L, 26L, 27L, 26L, 23L, 19L, 19L,
22L, 22L, 22L, 22L, 26L, 26L, 19L, 22L, 26L, 25L, 22L, 18L),
ym = structure(c(2004, 2004, 2004, 2004, 2004.08333333333,
2004.08333333333, 2004.08333333333, 2004.08333333333, 2004.08333333333,
2004.16666666667, 2004.16666666667, 2004.16666666667, 2004.16666666667,
2004.25, 2004.25, 2004.25, 2004.25, 2004.33333333333, 2004.33333333333,
2004.33333333333), class = "yearmon")), .Names = c("n", "ym"
), row.names = c(NA, 20L), class = "data.frame")
错误是
> tst %>% group_by(ym) %>% summarize(ave=mean(n))
Error: column 'ym' has unsupported type : yearmon
有没有办法让它同时适用于 zoo
和 dplyr
,或者我必须分别对我的年月进行编码?
如错误所述,dplyr
不支持 class。我们可以将 ym
更改为 dplyr
支持的 class,它将起作用
library(dplyr)
tst %>%
group_by(ym = as.numeric(ym)) %>%
summarise(ave = mean(n))
# ym ave
#1 2004.000 25.00000
#2 2004.083 21.80000
#3 2004.167 23.00000
#4 2004.250 23.25000
#5 2004.333 21.66667
或者如@G.Grothendieck在评论中提到的,我们可以将group_by
替换为group_by(ym = as.Date(ym)
或group_by(ym = format(ym, "%Y-%m"))
也许你在dplyr 0.4.3还没有发布的时候问过这个问题,我发现升级到这个版本就消除了这个错误。
(一位同事正在使用 dplyr 0.4.2,它也有效:)