gpt4 book ai didi

r - R中子集聚合函数的意外行为

转载 作者:行者123 更新时间:2023-12-01 00:53:18 25 4
gpt4 key购买 nike

我有一个包含以下格式的数据框:

manufacturers pricegroup leads
harley <2500 #
honda <5000 #
... ... ..

我正在使用聚合函数以下列方式提取数据:
aggregate( leads ~ manufacturer + pricegroup, data=leaddata, 
FUN=sum, subset=(manufacturer==c("honda","harley")))

我注意到这没有返回正确的总数。我添加到子集组的制造商越多,每个制造商的数字就越小。但是,如果我使用:
aggregate( leads ~ manufacturer + pricegroup, data=leaddata, 
FUN=sum, subset=(manufacturer=="honda" | manufacturer=="harley"))

它返回正确的数字。对于我的生活,我无法弄清楚为什么。我只会使用 OR 运算符,除非我将动态传递制造商列表。关于为什么第一个构造不起作用的任何想法?更好,关于如何使它工作的任何想法?谢谢!

最佳答案

问题是==在“本田”和“哈雷”的值之间交替,并与“制造商”变量的相关位置的值进行比较。另一方面,%in% (按照 MrFlick 的建议)和 |在决定标记哪些值之前,正在检查整个“制造商”变量。
==将值回收到被比较的长度。

举个例子可能更容易理解:

set.seed(1)
v1 <- sample(letters[1:5], 10, TRUE)
v2 <- c("a", "b") ## Will be recycled to rep(c("a", "b"), 5) when comparing with v1

data.frame(v1, v2,
`==` = v1 == v2,
`%in%` = v1 %in% v2,
`|` = v1 == "a" | v1 == "b",
check.names = FALSE)
# v1 v2 == %in% |
# 1 b a FALSE TRUE TRUE
# 2 b b TRUE TRUE TRUE
# 3 c a FALSE FALSE FALSE
# 4 e b FALSE FALSE FALSE
# 5 b a FALSE TRUE TRUE
# 6 e b FALSE FALSE FALSE
# 7 e a FALSE FALSE FALSE
# 8 d b FALSE FALSE FALSE
# 9 d a FALSE FALSE FALSE
# 10 a b FALSE TRUE TRUE

请注意,在 == 中专栏,唯一 TRUE value 是“v1”和“v2”的回收值相同的地方。

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

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