我有以下 R 数据框:
x y z
1 -0.5242428 598.7092 1099.503
2 -0.4303593 599.2725 1100.970
3 0.1151290 599.9294 1100.062
4 0.5442775 600.9277 1098.690
5 1.4880749 599.9780 1098.479
6 0.2283675 600.3660 1099.128
我想获取每列的分位数,并认为 dplyr 是一个优雅的解决方案。以下路线需要指定每一列,但这并不优雅。
> df %>% summarise(`25%`=quantile(x, probs=0.25),
+ `50%`=quantile(x, probs=0.5),
+ `75%`=quantile(x, probs=0.75))
我还想看看是否可以使用以下方法:
df %>% mutate(quantile(., probs = c(0, 0.25, 0.5, 0.75, 1)))
我假设使用 .
会告诉函数对所有列执行此操作,但我收到错误。
错误:选择了未定义的列
最好的解决方案是什么
var 25% 50% 75%
x -0.587382 0.1546231 0.9864742
y 599.2584 599.9998 600.6679
z 1099.31 1100.028 1100.704
最佳答案
我们可以尝试
library(tidyverse)
df %>%
summarise_all(funs(list(quantile(., probs = c(0.25, 0.5, 0.75))))) %>%
unnest %>%
transpose %>%
setNames(., c('25%', '50%', '75%')) %>%
map_df(unlist) %>%
bind_cols(data.frame(vars = names(df)), .)
关于r - dplyr 迭代分位数的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43373568/