R 为什么聚合不根据文档忽略NA值?

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?的文档中,

假设我有以下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?
的文档中,它说:

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