R 为什么聚合不根据文档忽略NA值?
假设我有以下data.frame:R 为什么聚合不根据文档忽略NA值?,r,dataframe,aggregate,R,Dataframe,Aggregate,假设我有以下data.frame: v <- data.frame(user=c("tom", "tom", "joe", "joe", "pat"), grade=c(70, NA, 80, 90, 100), stringsAsFactors = F) v user grade 1 tom 70 2 tom NA 3 joe 80 4 joe 90 5 pat 100 我很困惑为什么“tom”的名称是NA,因为在aggregate?的文档中,
v <- data.frame(user=c("tom", "tom", "joe", "joe", "pat"), grade=c(70, NA, 80, 90, 100), stringsAsFactors = F)
v
user grade
1 tom 70
2 tom NA
3 joe 80
4 joe 90
5 pat 100
我很困惑为什么“tom”的名称是NA
,因为在aggregate?
的文档中,它说:
na.行动一种函数,用于指示当数据 包含NA值。默认设置是忽略中缺少的值 给定变量
我是否误解了
na.action
所说的内容,因为它让我相信它应该忽略na
值?您使用了错误的S3方法。默认方法没有na.action
参数。使用公式方法,其中包含:
aggregate(grade ~ user, v, sum)
# user grade
#1 joe 170
#2 pat 100
#3 tom 70
S3方法及其参数记录在帮助页面上。formula方法是唯一具有此参数的方法,据我所知,其他方法不会在内部调用它。
aggregate(v$grade,by=list(user=v$user),FUN=sum,na.rm=TRUE)
na.rm
不是此函数文档中列出的参数,但您的解决方案确实有效。给出了什么?它来自于sum
。有两个函数参数-1) 从aggregate
本身开始,在na.action
发生的地方,为什么na.action
不起作用?根据aggregate
的文档,函数:sum
永远不会看到NA
NA.rm=TRUE
通过..
参数传递给FUN
,所以你在做sum(something,NA.rm=TRUE)
ohhh,。我明白了,我没有仔细阅读“用法”部分。我明白了,不同类的不同S3方法使用不同的参数。该死,真让人困惑!如果要按用户聚合2个字段(如:low_grade和high_grade),聚合公式是什么。它会是cbind(低等级,高等级)~user
?有更多关于聚合公式的文档吗?与使用带有两个因变量的lm
时一样:cbind(低等级,高等级)~user
顺便说一句,aggregate
不再被广泛使用,因为人们大多转向使用dplyr或data.table包进行聚合。
aggregate(grade ~ user, v, sum)
# user grade
#1 joe 170
#2 pat 100
#3 tom 70