gpt4 book ai didi

r - R 中 plyr::ldply(tapply) 的 dplyr 等价物是什么?

转载 作者:行者123 更新时间:2023-12-02 07:31:58 25 4
gpt4 key购买 nike

最终,我试图实现类似于以下内容的目标,但利用 dplyr 而不是 plyr:

library(dplyr)  
probs = seq(0, 1, 0.1)

plyr::ldply(tapply(mtcars$mpg,
mtcars$cyl,
function(x) { quantile(x, probs = probs) }))

# .id 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
# 1 4 21.4 21.50 22.80 22.80 24.40 26.0 27.30 30.40 30.40 32.40 33.9
# 2 6 17.8 17.98 18.32 18.98 19.40 19.7 20.48 21.00 21.00 21.16 21.4
# 3 8 10.4 11.27 13.90 14.66 15.04 15.2 15.44 15.86 16.76 18.28 19.2

我能想到的最好的 dplyr 等效项是这样的:

library(tidyr)
probs = seq(0, 1, 0.1)

mtcars %>%
group_by(cyl) %>%
do(data.frame(prob = probs, stat = quantile(.$mpg, probs = probs))) %>%
spread(prob, stat)

# cyl 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1
# 1 4 21.4 21.50 22.80 22.80 24.40 26.0 27.30 30.40 30.40 32.40 33.9
# 2 6 17.8 17.98 18.32 18.98 19.40 19.7 20.48 21.00 21.00 21.16 21.4
# 3 8 10.4 11.27 13.90 14.66 15.04 15.2 15.44 15.86 16.76 18.28 19.2

请注意,我还需要使用 tidyr::spread。此外,请注意,由于将第一列中的 .id 替换为 cyl,因此我丢失了列标题的 % 格式。

问题:

  1. 是否有更好的基于 dplyr 的方法来实现此目的tapply %>% ldply 链?
  2. 有没有一种方法可以两全其美无需跳过太多的圈子就可以进入世界?即获取%第一列的格式和正确的 cyl 列名称?

最佳答案

使用dplyr

library(dplyr)
mtcars %>%
group_by(cyl) %>%
do(data.frame(as.list(quantile(.$mpg,probs=probs)), check.names=FALSE))
# cyl 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
#1 4 21.4 21.50 22.80 22.80 24.40 26.0 27.30 30.40 30.40 32.40 33.9
#2 6 17.8 17.98 18.32 18.98 19.40 19.7 20.48 21.00 21.00 21.16 21.4
#3 8 10.4 11.27 13.90 14.66 15.04 15.2 15.44 15.86 16.76 18.28 19.2

或者使用data.table的选项

library(data.table)
as.data.table(mtcars)[, as.list(quantile(mpg, probs=probs)) , cyl]
# cyl 0% 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%
#1: 6 17.8 17.98 18.32 18.98 19.40 19.7 20.48 21.00 21.00 21.16 21.4
#2: 4 21.4 21.50 22.80 22.80 24.40 26.0 27.30 30.40 30.40 32.40 33.9
#3: 8 10.4 11.27 13.90 14.66 15.04 15.2 15.44 15.86 16.76 18.28 19.2

关于r - R 中 plyr::ldply(tapply) 的 dplyr 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30597522/

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