R按两组对变量求和[重复]

Posted

技术标签:

【中文标题】R按两组对变量求和[重复]【英文标题】:R sum a variable by two groups [duplicate] 【发布时间】:2019-02-24 01:34:50 【问题描述】:

我在 R 中有一个通常采用这种形式的数据框:

ID     Year     Amount  
3       2000      45  
3       2000      55  
3       2002      10  
3       2002      10  
3       2004      30  
4       2000      25  
4       2002      40  
4       2002      15  
4       2004      45  
4       2004      50

我想按 ID 对每年的金额求和,并使用此输出获得一个新的数据框。

ID      Year     Amount  
3       2000      100  
3       2002       20  
3       2004       30  
4       2000       25  
4       2002       55  
4       2004       95 

这是我需要做的一个例子,实际上数据要大得多。请帮忙,谢谢!

【问题讨论】:

aggregate(Amount ~ ID + Year, DF, sum) 【参考方案1】:

data.table

library("data.table")

D <- fread(
"ID     Year     Amount  
3       2000      45  
3       2000      55  
3       2002      10  
3       2002      10  
3       2004      30  
4       2000      25  
4       2002      40  
4       2002      15  
4       2004      45  
4       2004      50"
)
D[, .(Amount=sum(Amount)), by=.(ID, Year)]

并以R为基数:

aggregate(Amount ~ ID + Year, data=D, FUN=sum)

(由@markus 评论)

【讨论】:

【参考方案2】:

您可以group_by IDYear 然后在summarise 中使用sum

library(dplyr)

txt <- "ID Year Amount
3 2000 45
3 2000 55
3 2002 10
3 2002 10
3 2004 30
4 2000 25
4 2002 40
4 2002 15
4 2004 45
4 2004 50"

df <- read.table(text = txt, header = TRUE)

df %>% 
  group_by(ID, Year) %>% 
  summarise(Total = sum(Amount, na.rm = TRUE))
#> # A tibble: 6 x 3
#> # Groups:   ID [?]
#>      ID  Year Total
#>   <int> <int> <int>
#> 1     3  2000   100
#> 2     3  2002    20
#> 3     3  2004    30
#> 4     4  2000    25
#> 5     4  2002    55
#> 6     4  2004    95

如果您有多个Amount 列并且想要应用多个函数,您可以使用summarise_ifsummarise_all

df %>% 
  group_by(ID, Year) %>% 
  summarise_if(is.numeric, funs(sum, mean))
#> # A tibble: 6 x 4
#> # Groups:   ID [?]
#>      ID  Year   sum  mean
#>   <int> <int> <int> <dbl>
#> 1     3  2000   100  50  
#> 2     3  2002    20  10  
#> 3     3  2004    30  30  
#> 4     4  2000    25  25  
#> 5     4  2002    55  27.5
#> 6     4  2004    95  47.5

df %>% 
  group_by(ID, Year) %>% 
  summarise_all(funs(sum, mean, max, min))
#> # A tibble: 6 x 6
#> # Groups:   ID [?]
#>      ID  Year   sum  mean   max   min
#>   <int> <int> <int> <dbl> <dbl> <dbl>
#> 1     3  2000   100  50      55    45
#> 2     3  2002    20  10      10    10
#> 3     3  2004    30  30      30    30
#> 4     4  2000    25  25      25    25
#> 5     4  2002    55  27.5    40    15
#> 6     4  2004    95  47.5    50    45

由reprex package (v0.2.1.9000) 于 2018 年 9 月 19 日创建

【讨论】:

以上是关于R按两组对变量求和[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何按组对变量求和

如何按组对变量求和

如何按组对变量求和

如何按组对变量求和

如何在R中按两列分组

如何根据组对一列数据求和