1) dplyr/zoo 使用结尾处注释中所示的数据,将每个日期转换为年月类别,该类别表示不含日的日期,然后对数值列进行总结:
library(dplyr)
library(zoo)
df %>%
group_by(yearmon = as.yearmon(capture.date)) %>%
summarize_if(is.numeric, sum) %>%
ungroup
给出以下 tibble:
yearmon Test1 Test2 Test3
<yearmon> <int> <int> <int>
1 Mar 2016 3 3 3
2 Apr 2016 1 0 1
2) zoo 这可以通过一个 read.zoo
命令完成。如果您希望得到一个 data.frame 结果,则可以在结果上使用 fortify.zoo
:
library(zoo)
read.zoo(df, FUN = as.yearmon, aggregate = sum)
给出这个动物园系列:
Test1 Test2 Test3
Mar 2016 3 3 3
Apr 2016 1 0 1
2a) 使用magrittr管道的动物园
这也可以使用magrittr(或dplyr)管道来编写:
library(magrittr)
library(zoo)
df %>% read.zoo(FUN = as.yearmon, aggregate = sum)
或者转换为 data.frame
library(magrittr)
library(zoo)
df %>% read.zoo(FUN = as.yearmon, aggregate = sum) %>% fortify.zoo
3) Base R 使用纯粹的Base R提取每个日期的前7个字符,然后以此聚合:
df2 <- transform(df, year.month = substr(capture.date, 1, 7), capture.date = NULL)
aggregate(. ~ year.month, df2, sum)
给定这个数据框:
year.month Test1 Test2 Test3
1 2016-03 3 3 3
2 2016-04 1 0 1
注意
以可重复的形式输入:
Lines <- "
capture.date Test1 Test2 Test3
2016-03-18 0 1 1
2016-03-18 1 1 1
2016-03-20 2 1 1
2016-04-12 1 0 1"
df <- read.table(text = Lines, header = TRUE, as.is = TRUE)