假设一个人正在操纵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()
在吗?
答案 0 :(得分: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