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
ID
和Year
然后在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_if
或summarise_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按两组对变量求和[重复]的主要内容,如果未能解决你的问题,请参考以下文章