首页 > 解决方案 > 如何创建一个函数来计算每个数据列、每个数据因子的中位数和四分位数?

问题描述

我有代码来计算一个数据集

    quant0 = c(0.5)
Median = apply(data1[2:1000], 2, median, probs = quant0, na.rm = TRUE )

quant1 = c(0.25)
firstQuartiles = apply( data1[2:1000] , 2 , quantile , probs = quant1 , na.rm = TRUE ) 

quant2 = c(0.75)
thirdQuartiles =  apply( data1[2:1000] , 2 , quantile , probs = quant2 , na.rm = TRUE )

我有多个数据集,其格式与我用于上述代码的格式相同。这是所有数据框的样子:

          Type    x1  x2  x3  ...
1:  type1   1.54    1.48    1.88    
2:  type2   1.46    1.99    1.48
3:  type1   2.01    1.02    1.03
...

我是编写函数的新手。我需要应用此函数的其他数据集与我上面显示的格式完全相同。唯一会改变的是列数。 编辑:我没有正确解释,我想使用一个函数来计算每种类型的每列的中位数、第一四分位数和第三四分位数。

这是我用来执行我在上面的编辑中指定的代码:

    library(dplyr)
FactorMedians = data1 %>%
  group_by(Type) %>%
  summarise(across(starts_with('x'), median, probs = quant0, na.rm = TRUE))

我需要将其更改为可以与其他类似数据集一起使用的函数

标签: r

解决方案


这是一个有趣的tidyverse解决方案。summarize如果汇总函数有多个输出,则该函数返回多行。然后我们可以命名这些行。

library(dplyr)
library(tibble)
iris %>%
  summarise(across(where(is.numeric), 
                   function(x) quantile(x, 
                                        probs = c(0.25, 0.5, 0.75),
                                        na.rm = TRUE))) %>%
  mutate(id = c("first quartile", "median", "third quartile")) %>%
  column_to_rownames("id")

               Sepal.Length Sepal.Width Petal.Length Petal.Width
first quartile          5.1         2.8         1.60         0.3
median                  5.8         3.0         4.35         1.3
third quartile          6.4         3.3         5.10         1.8

推荐阅读