gpt4 book ai didi

r - dplyr 中的列函数在 group_by 后发生变异,但没有给出正确的分组结果

转载 作者:行者123 更新时间:2023-12-03 17:41:00 27 4
gpt4 key购买 nike

我刚刚开始使用 dplyr 并且一直在转换我的一些 plyr 代码。我喜欢新语法,但我无法让 mutate() 按组在列上应用函数,例如:

library(Hmisc)
library(plyr)
library(dplyr)

t1 <- ddply(mtcars, .(cyl), transform, qrt=cut2(wt, g=4))
levels(t1$qrt) # works: different quartiles for each group

t2 <- mtcars %>% group_by(cyl) %>% mutate(qrt=cut2(wt, g=4))
levels(t2$qrt) # doesn't work: uses only 4 quartiles from the first group

起初我以为第二个例子是使用整个 wt列而不是 cyl组,但实际上似乎只使用第一组的四分位数并将它们分配给所有组,即使 wt落在范围之外。

我在 wt 周围遗漏了一些语法吗? mutate 函数内部的引用?我可以让 ddply 版本用于像 sum() 这样的函数,还有关于 cut2() 的事情吗?那是造成问题的原因吗?

我已经阅读了很多关于可能是类似问题的帖子,并尝试在没有 ddply 加载的干净环境中运行 dplyr 版本等等。

谢谢你的帮助!

最佳答案

它似乎适用于最新版本的 dplyr , 0.8.3 .输出的数据框显示每个cyl有自己的一组范围和最小值和最大值 wt在每个垃圾箱中不要超出规定的范围。

remove.packages("dplyr") # Unecessary but proves that this is the latest deployment version
install.packages("dplyr")

packageVersion("dplyr")

# [1] ‘0.8.3’

library(Hmisc)
library(dplyr)

t2 <- mtcars %>%
group_by(cyl) %>%
mutate(qrt = cut2(wt, g=4))

t2 %>%
group_by(cyl, qrt) %>%
summarize(min = min(wt), max = max(wt)) %>%
arrange(cyl, qrt)

# A tibble: 12 x 4
# Groups: cyl [3]
# cyl qrt min max
# <dbl> <chr> <dbl> <dbl>
# 1 4 [1.51,1.94) 1.51 1.84
# 2 4 [1.94,2.32) 1.94 2.2
# 3 4 [2.32,3.15) 2.32 2.78
# 4 4 [3.15,3.19] 3.15 3.19
# 5 6 [2.62,2.88) 2.62 2.77
# 6 6 [2.88,3.44) 2.88 3.22
# 7 6 3.44 3.44 3.44
# 8 6 3.46 3.46 3.46
# 9 8 [3.17,3.57) 3.17 3.52
#10 8 [3.57,3.78) 3.57 3.73
#11 8 [3.78,5.25) 3.78 4.07
#12 8 [5.25,5.42] 5.25 5.42

关于r - dplyr 中的列函数在 group_by 后发生变异,但没有给出正确的分组结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36193757/

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