gpt4 book ai didi

r - 聚合函数中的子集参数

转载 作者:行者123 更新时间:2023-12-02 09:36:46 25 4
gpt4 key购买 nike

我在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 参数是“公式”类型的 S3 方法的一部分,您没有使用它。您正在使用 data.frame 类型的 S3 方法。因此,您的 subset 参数将在 ... 中向下传递到 lapply(),然后传递到每次调用 sum( )。由于它是一个包含 6 个 TRUE 值的向量,因此每次求和都会添加 6 个值。

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

不幸的是,在将数据传递给aggregate()之前,您似乎需要对数据进行子集化。

关于r - 聚合函数中的子集参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com