我的数据框有两列,Ref_Date
列和Value
列。从1988年到2015年,日期列每年包含12行。我需要做的是按年份分组并汇总Value
列,以便每年只能获得一行包含总和当年12个月中每一个的所有价值观:
row.names Ref_Date Value
166483 1989/01 713
166484 1989/02 771
166485 1989/03 565
166486 1989/04 1248
166487 1989/05 1380
166488 1989/06 1118
166489 1989/07 1026
166490 1989/08 995
166491 1989/09 835
166492 1989/10 939
166493 1989/11 878
166494 1989/12 1075
166495 1990/01 878
166496 1990/02 563
166497 1990/03 773
166498 1990/04 1131
166499 1990/05 1562
166500 1990/06 1747
166501 1990/07 1258
166502 1990/08 791
答案 0 :(得分:2)
您可以在dplyr中使用以下代码:
library(dplyr)
df %>%
group_by(year = substr(Ref_Date, 1, 4)) %>% # create the groups
summarise(Value = sum(Value))
#Source: local data frame [2 x 2]
#
# year Value
#1 1989 11543
#2 1990 8703
或类似于data.table
包
library(data.table)
setDT(df)[, sum(Value), by = .(year = substr(Ref_Date, 1, 4))]
# year V1
#1: 1989 11543
#2: 1990 8703
或者用基础R
with(df, aggregate(Value ~ cbind(year = substr(Ref_Date, 1, 4)), FUN = sum))
# year Value
#1 1989 11543
#2 1990 8703
答案 1 :(得分:1)
另一个答案可能如下(使用tapply
):
years <- 1988:2015 ## or first.year:last.year
sums <- tapply(df$Value, substr(df$Ref_Date, 1, 4)), sum)
new.df <- data.frame(years = years, sums = sums)
编辑:只是一个更通用的解决方案,以避免标准日期(但它基本上类似于上面发布的那个):
years <- substr(df$Ref_Date, 1, 4)
sums <- tapply(df$Value, years, sum)
new.df <- data.frame(years = unique(years), sum = sums)