假设我们有这样的数据集:
年份状态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)
这是正确的方法吗?
答案 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
选项。他的答案更好。