【问题标题】:Summarize to quantiles in using dplyr?总结为使用 dplyr 的分位数?
【发布时间】:2018-07-28 22:42:22
【问题描述】:

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

noted before 一直是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),
              ...)

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

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

有吗?

【问题讨论】:

  • Bingo--trick 是将summarize 转换为list(quantile(...)),并带有第二个标签摘要变量。然后松散。您会得到两列,一列带有值,另一列带有标签,即使数据已分组并且还有其他列要保留,这仍然有效。

标签: r dplyr


【解决方案1】:

这可能会做到:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 2016-12-07
    • 2017-02-18
    • 1970-01-01
    • 2018-10-12
    相关资源
    最近更新 更多