R 按日期聚合然后按字符聚合

R aggregating on date then character

我有一个 table 如下所示:

Year    Country Variable 1  Variable 2
1970    UK            1       3
1970    USA           1       3
1971    UK            2       5
1971    UK            2       3
1971    UK            1       5
1971    USA           2       2
1972    USA           1       1
1972    USA           2       5

如果有人能告诉我如何聚合数据以首先按年份分组,然后是国家/地区,然后是变量 1 和变量 2 的总和,我将不胜感激,因此输出将是:

Year    Country Sum Variable 1  Sum Variable 2
1970    UK              1           3
1970    USA             1           3
1971    UK              5           13
1971    USA             2           2
1972    USA             3           6

这是我尝试过但无济于事的代码(真正的数据框是 125,000 行乘以 30 多列,因此是子集。请客气,我是 R 的新手!)

#making subset from data
GT2 <- subset(GT1, select = c("iyear", "country_txt", "V1", "V2"))
#making sure data types are correct
GT2[,2]=as.character(GT2[,2])
GT2[,3] <- as.numeric(as.character( GT2[,3] ))
GT2[,4] <- as.numeric(as.character( GT2[,4] ))

#removing NA values
GT2Omit <- na.omit(GT2)

#trying to aggregate - i.e. group by year, then country with the sum of Variable 1 and Variable 2 being shown
aggGT2 <-aggregate(GT2Omit, by=list(GT2Omit$iyear, GT2Omit$country_txt), FUN=sum, na.rm=TRUE)

dplyr 几乎总是现在的答案。

library(dplyr)
aggGT1 <- GT1 %>% group_by(iyear, country_txt) %>% summarize(sv1=sum(V1), sv2=sum(V2))

话虽如此,学习基本的 R 函数(如 aggregateby 是件好事。

您的总和几乎是正确的:

> aggGT2 <-aggregate(GT2Omit[3:4], by=GT2Omit[c("country_txt", "iyear")], FUN=sum, na.rm=TRUE)
> aggGT2
  country_txt iyear V1 V2
1          UK  1970  1  3
2         USA  1970  1  3
3          UK  1971  5 13
4         USA  1971  2  2
5         USA  1972  3  6