【发布时间】: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),
...)
这显然是卑鄙的。然而,如链接问题中所述,如何使用ddply 或do 来实现这一目标对我来说并不是很明显。感觉应该有一种“整洁”的方式来做到这一点,大致如下:
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(...)),并带有第二个标签摘要变量。然后松散。您会得到两列,一列带有值,另一列带有标签,即使数据已分组并且还有其他列要保留,这仍然有效。