在group_by之后的dplyr mutate中的列上的函数未给出正确的分组结果

Nat*_*Nat 5 r dplyr

我刚开始使用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
Run Code Online (Sandbox Code Playgroud)

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

我是否错过了wtmutate函数内部引用的一些语法?我可以让ddply版本适用于像sum()这样的函数,所以有什么东西cut2()导致问题吗?

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

谢谢你的帮助!

cha*_*Rak 0

它似乎可以与最新版本的dplyr,一起使用0.8.3。输出的数据帧显示每个数据框cyl都有自己的一组范围,并且每个箱中的最小值和最大值wt不超出规定的范围。

\n\n
remove.packages("dplyr") # Unecessary but proves that this is the latest deployment version\ninstall.packages("dplyr")\n\npackageVersion("dplyr")\n\n# [1] \xe2\x80\x980.8.3\xe2\x80\x99\n\nlibrary(Hmisc)\nlibrary(dplyr)\n\nt2 <- mtcars %>% \n  group_by(cyl) %>% \n  mutate(qrt = cut2(wt, g=4))\n\nt2 %>%\n  group_by(cyl, qrt) %>%\n  summarize(min = min(wt), max = max(wt)) %>%\n  arrange(cyl, qrt)\n\n# A tibble: 12 x 4\n# Groups:   cyl [3]\n#     cyl qrt           min   max\n#   <dbl> <chr>       <dbl> <dbl>\n# 1     4 [1.51,1.94)  1.51  1.84\n# 2     4 [1.94,2.32)  1.94  2.2 \n# 3     4 [2.32,3.15)  2.32  2.78\n# 4     4 [3.15,3.19]  3.15  3.19\n# 5     6 [2.62,2.88)  2.62  2.77\n# 6     6 [2.88,3.44)  2.88  3.22\n# 7     6 3.44         3.44  3.44\n# 8     6 3.46         3.46  3.46\n# 9     8 [3.17,3.57)  3.17  3.52\n#10     8 [3.57,3.78)  3.57  3.73\n#11     8 [3.78,5.25)  3.78  4.07\n#12     8 [5.25,5.42]  5.25  5.42\n
Run Code Online (Sandbox Code Playgroud)\n