NA值和R聚合函数

这是一个缺少值的简单数据框:

M = data.frame(Name = c(‘name’,’name’),Col1 = c(NA,1),Col2 = c(1,1))

当我以这种方式应用聚合M:

aggregate(。〜Name,M,FUN = sum,na.rm = TRUE)

结果是:

RowName Col1 Col2
name    1    1

所以整个第一行都被忽略。但如果我这样做

聚合(M [,2:3],by = list(M $ Name),FUN = sum,na.rm = TRUE)

结果是

Group.1 Col1 Col2
name    1    2

所以只忽略(1,1)条目。

这导致我的一个代码中的一个主要的调试头痛,因为我认为这两个调用是等效的。有没有一个很好的理由为什么“公式”输入法被不同的对待?

谢谢。

好的问题,但在我看来,这不应该引起主要的调试头痛,因为在手册页面的多个地方记录得很清楚。

首先,在使用部分:

## S3 method for class 'formula'
aggregate(formula,data,FUN,...,subset,na.action = na.omit)

后来在说明中:

na.action: a function which indicates what should happen when the data contain NA values. The default is to ignore missing values in the given variables.

我不能回答为什么公式模式的写法不同—这是函数作者必须回答的 – 但是使用上面的信息,你可以使用以下内容

aggregate(.~Name,M,FUN=sum,na.rm=TRUE,na.action=NULL)
#   Name Col1 Col2
# 1 name    1    2

相关文章

迭代器模式(Iterator)迭代器模式(Iterator)[Cursor]意图...
高性能IO模型浅析服务器端编程经常需要构造高性能的IO模型,...
策略模式(Strategy)策略模式(Strategy)[Policy]意图:定...
访问者模式(Visitor)访问者模式(Visitor)意图:表示一个...
命令模式(Command)命令模式(Command)[Action/Transactio...
生成器模式(Builder)生成器模式(Builder)意图:将一个对...