我的数据框如下
name dates vol
a 02/23/2017 1
a 02/27/2017 2
a 03/14/2018 10
a 03/26/2018 8
b 07/10/2017 5
b 07/15/2018 15
b 08/20/2018 25
我想基于相同的月份和年份对vol求和 即检查名称和月份+年份是否相同然后相加的条件 Vol
中的值 expected output as:
name Total.Vol
a 3 (1+2 sum of value which belong to same month+year
a 18 10+8
b 5
b 35 (15+20)
答案 0 :(得分:0)
形成Month和Year列(使用库lubridate
是最简单的),然后按以下新变量分组:
library(lubridate)
library(dplyr)
df <- df %>% mutate(Month = month(dates), Year = year(dates))
df %>% group_by(name, Month, Year) %>% count()
答案 1 :(得分:0)
您可以使用软件包as.yearmon
中的函数zoo
来执行此操作,以获取年/月的日期以及基本R函数aggregate
。
但是首先将列转换为类Date
。
library(zoo)
df1$dates <- as.Date(df1$dates, "%m/%d/%Y")
aggregate(vol ~ name + as.yearmon(dates), df1, sum)
# name as.yearmon(dates) vol
#1 a fev 2017 3
#2 b jul 2017 5
#3 a mar 2018 18
#4 b jul 2018 15
#5 b ago 2018 25
数据。
df1 <- read.table(text = "
name dates vol
a 02/23/2017 1
a 02/27/2017 2
a 03/14/2018 10
a 03/26/2018 8
b 07/10/2017 5
b 07/15/2018 15
b 08/20/2018 25
", header = TRUE)
答案 2 :(得分:0)
基于data.table
的解决方案
library(data.table)
setDT(df)
df[, dates := as.Date(dates, "%m/%d/%Y")]
df[, sum(vol), by = .(name, ym = format(dates, "%Y-%m"))]
name ym V1
1: a 2017-02 3
2: a 2018-03 18
3: b 2017-07 5
4: b 2018-07 15
5: b 2018-08 25
答案 3 :(得分:0)
简短的dplyr
解决方案:
library(dplyr)
df %>%
group_by(name, yrmon = format(as.Date(dates, "%m/%d/%Y"), "%Y-%m")) %>%
summarise(Total.Vol = sum(vol))
输出:
name yrmon Total.Vol
<chr> <chr> <int>
1 a 2017-02 3
2 a 2018-03 18
3 b 2017-07 5
4 b 2018-07 15
5 b 2018-08 25