基于3列汇总数据

时间:2014-06-21 10:01:44

标签: r dataframe aggregate

假设我们有这样的数据集:

年份状态SomeValue

2000 NY   1000
2000 NY   1200
2000 NY   1100
2001 NY   2000
2001 NY   2200
...

如何聚合所有3列以使数据集看起来像:

year state somevalue
2000 NY 3300
2001 NY 4200


aggregate(data$year, list(data$state, data$somevalue), data, sum)

这是正确的方法吗?

5 个答案:

答案 0 :(得分:1)

嗯,有很多方法可以在R中聚合数据。使用aggregate(),您可以做

aggregate(SomeValue ~ Year+State, data=data, FUN=sum)

with(data, aggregate(x = SomeValue, by = list(Year=Year, State=State), FUN = sum))

答案 1 :(得分:1)

在做这些事情之前,您可能应该花一些时间学习R语法的基础知识 - 您的尝试暗示了对R中某些事情的基本误解,但以下可能会为您解决问题:

x <- aggregate(somevalue ~ year + state, data=data, FUN=sum)

答案 2 :(得分:0)

library(sqldf)
sqldf( "select year , state , sum( somevalue ) as sum_somevalue from data group by year , state" )

答案 3 :(得分:0)

如果dat是数据集

library(dplyr)
dat %>%
group_by(year, state) %>%
summarise(somevalue=sum(somevalue))

答案 4 :(得分:0)

您建议的解决方案非常接近。这是一个稍微修改过的版本,不会返回警告:

data <- read.table(text='
year state somevalue
2000 NY   1000
2000 NY   1200
2000 NY   1100
2001 NY   2000
2001 NY   2200
', header=TRUE)

aggregate(data$somevalue, list(data$state, data$year), sum)

虽然@ lukeA的解决方案和@Livius的解决方案在基础R中更好,因为它们以请求的顺序返回所需的列名。

这将返回三个请求的列名中的两个:

aggregate(data$somevalue, list(state=data$state, year=data$year), sum)

我的第二个解决方案与LukeA的第二个解决方案不同之处仅在于我没有使用with函数并且没有标记aggregate选项。他的答案更好。