聚合函数中的r子集参数

  • 本文关键字:子集 参数 函数
  • 更新时间 :
  • 英文 :


我在aggregate函数中使用subset参数得到了意想不到的结果,所以我尝试了以下操作。

 > A <- data.frame( d1=c(1,1,1,2,2,2), d2=c(1,1,2,2,3,3) , n=c(13,24,54,24,12,32) )
 > aggregate( A[,c("n"),drop=FALSE] , A[,c("d1","d2")] , FUN=sum )
   d1 d2  n
 1  1  1 37
 2  1  2 54
 3  2  2 24
 4  2  3 44

有意义

 > aggregate( A[rep(TRUE,6),c("n"),drop=FALSE] , A[rep(TRUE,6),c("d1","d2")] , FUN=sum )
   d1 d2  n
 1  1  1 37
 2  1  2 54
 3  2  2 24
 4  2  3 44

确实有意义,但这将是一种复杂的方式来限制观察。

下面不应该返回与上面相同的结果吗?为什么不呢?

 > aggregate( A[,c("n"),drop=FALSE] , A[,c("d1","d2")] , FUN=sum , subset=rep(TRUE,6) )
   d1 d2  n
 1  1  1 43
 2  1  2 60
 3  2  2 30
 4  2  3 50

以防子集是基于索引的,我尝试了以下操作,其结果也不直观:

 > aggregate( A[,c("n"),drop=FALSE] , A[,c("d1","d2")] , FUN=sum , subset=1:6 )
   d1 d2  n
 1  1  1 58
 2  1  2 75
 3  2  2 45
 4  2  3 65

根据帮助文件,subset参数是类型"formula"的S3方法的一部分,您不使用它。您正在为data.frame类型使用S3方法。因此,您的subset参数在...中向下传递到lapply(),然后传递到对sum()的每次调用。因为它是一个包含6个TRUE值的向量,所以每次求和都会得到6。

这是一个很容易犯的错误,所以我理解你是怎么到这里的。

看起来你将需要你的数据子集之前传递给aggregate(),不幸的是

最新更新