我有一个数据框:
head(df)
Year Find Found
6982 1901 267 246
6983 1901 271 251
6984 1902 317 236
6985 1903 339 244
6986 1904 339 260
6987 1903 345 15
5255 1902 47 45
5256 1901 46 NA
5257 1906 45 150
5258 1905 42 24
5259 1910 42 78
5260 1910 41 NA
当我尝试聚合它时:
aggdata <-aggregate(df, by=list(Year),
FUN=sum, na.rm=TRUE)
我得到error
Error in aggregate.data.frame(AndelKvinnorUttax, by = list(Year), FUN = sum, :
object 'Year' not found
我找不到问题...
我的solution
是:
aggr=cbind(aggregate(data=df,Find~Year,
FUN=sum,na.rm=TRUE),aggregate(data=df,Found~Year,
FUN=sum,na.rm=TRUE))[,c(1,2,4)]
任何?
最诚挚的问候!
答案 0 :(得分:4)
或者,既然您在“解决方案”中使用公式方法,为什么不在实际解决方案中使用它呢?
使用.
指定“所有其他变量”。
此外,使用formula
方法,NA
值的处理方式也不同。您需要为na.rm
函数指定sum
,为na.pass
指定aggregate
。
aggregate(. ~ Year, df, sum, na.rm = TRUE, na.action="na.pass")
# Year Find Found
# 1 1901 584 497
# 2 1902 364 281
# 3 1903 684 259
# 4 1904 339 260
# 5 1905 42 24
# 6 1906 45 150
# 7 1910 83 78
对于多样性(以及一些简单的语法),当然有data.table
:
library(data.table)
DT <- data.table(df)
DT[, lapply(.SD, sum, na.rm=TRUE), by = Year]
# Year Find Found
# 1: 1901 584 497
# 2: 1902 364 281
# 3: 1903 684 259
# 4: 1904 339 260
# 5: 1906 45 150
# 6: 1905 42 24
# 7: 1910 83 78
答案 1 :(得分:2)
aggregate
不会自动评估Year
参数中data.frame
范围内的data
。你必须明确地告诉它在哪里找到Year
,即......
aggdata <-aggregate(df, by=list(df$Year),
FUN=sum, na.rm=TRUE)
# Group.1 Year Find Found
#1 1901 5703 584 497
#2 1902 3804 364 281
#3 1903 3806 684 259
#4 1904 1904 339 260
#5 1905 1905 42 24
#6 1906 1906 45 150
#7 1910 3820 83 78