r - dplyr 迭代分位数的所有列

标签 r dplyr

我有以下 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/

相关文章:

r - 如何在远程服务器上使用R studio

重新编码数据帧 R 中的多列

r - 填充列中两个值之间的行

r - dplyr-0.6.0 编程取消引用

r - 分隔 R 数据框列忽略引号中的逗号

r - 当矩阵的维数未知时,如何设置唯一的行名和列名?

r - 在多行上按 '/' 一次拆分数千列,对新行中的值进行排序并添加 'NA' 值

r - 在 df2 的日期时间中使用 df1 的 "hour"和 "min"上的条件合并 2 个数据帧

r - 使用 sf 创建表示子组边界框的多边形

r - SE filter_ by 函数采用多列