这是一个缺少值的简单数据框:
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
Run Code Online (Sandbox Code Playgroud)
因此忽略整个第一行.但如果我这样做
aggregate(M[,2:3], by=list(M$Name), FUN=sum, na.rm=TRUE)
结果是
Group.1 Col1 Col2
name 1 2
Run Code Online (Sandbox Code Playgroud)
因此只忽略(1,1)条目.
这引起了我的一个代码中的主要调试问题,因为我认为这两个调用是等效的.是否有充分的理由为什么"公式"输入方法被区别对待?
谢谢.
A5C*_*2T1 50
很好的问题,但在我看来,这不应该引起一个重大的调试问题,因为它在手册页的多个地方都有相当清楚的记录aggregate
.
首先,在使用部分:
## S3 method for class 'formula'
aggregate(formula, data, FUN, ...,
subset, na.action = na.omit)
Run Code Online (Sandbox Code Playgroud)
后来,在描述中:
na.action
:一个函数,指示当数据包含NA值时应该发生什么.默认设置是忽略给定变量中的缺失值.
我无法回答为什么公式模式的编写方式不同 - 这是函数作者必须回答的问题 - 但是使用上述信息,您可以使用以下内容:
aggregate(.~Name, M, FUN=sum, na.rm=TRUE, na.action=NULL)
# Name Col1 Col2
# 1 name 1 2
Run Code Online (Sandbox Code Playgroud)
pic*_*ick 17
如果您希望公式版本相同,请尝试以下方法:
M = data.frame( Name = rep('name',5), Col1 = c(NA,rep(1,4)) , Col2 = rep(1,5))
aggregate(. ~ Name, M, function(x) sum(x, na.rm=TRUE), na.action = na.pass)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
72387 次 |
最近记录: |