首页 > 解决方案 > 总结为使用 dplyr 的分位数?

问题描述

假设一个人正在处理 中的数据框dplyr,并且想将一个人的数据汇总到一个表中,其中每个十分位数都有一列。撇开为什么要这样做的问题,还有如何做的问题。

之前已经注意到summarize不喜欢向量值函数。正如那篇文章中提到的,最直接的做法就是为每个十分位数创建一个显式列:

df <- data.frame(value=rnorm(1000)) %>%
    summarize(`0.1` = quantile(value, 0.1),
              `0.2` = quantile(value, 0.2), 
              `0.3` = quantile(value, 0.3),
              ...)

这显然是卑鄙的。然而,正如链接问题中提到的那样,如何使用ddplynor来实现这一目标对我来说并不是很明显。do感觉应该有一种“整洁”的方式来做到这一点,大致如下:

df <- data.frame(value=rnorm(1000)) %>%
    summarize(quantiles = quantile(value, seq(0.1, 0.9, 0.1))) %>%
    expand_vector_to_columns()

在那儿?

标签: rdplyr

解决方案


这可能会做到:

df <- data.frame(value=rnorm(1000))  %>%
unlist  %>% 
quantile(seq(.1, .9, .1)) %>% 
matrix(., 1,9, dimnames=list(NULL, names(.)))  %>%
as.data.frame(., col.names=colnames(.))
#df
#     10%     20%     30%     40%    50%    60%    70%    80%   90%
#1 -1.275 -0.8528 -0.5258 -0.2353 0.0303 0.3051 0.5732 0.8918 1.278

推荐阅读