【问题标题】:Apply list of functions across columns in R to fill in table在 R 中跨列应用函数列表以填写表格
【发布时间】:2020-08-20 11:14:58
【问题描述】:

我在 R 中有一个数据框,我们称它为 df,我想按列分析平均值、中位数、标准差、IQR 等。我准备了简洁的函数(不仅仅是meansd),它可以将向量作为输入和输出,例如IQR 或方差系数。现在,如果我想在属性(列)中应用这些中的任何一个,我可以使用 IQRs <- apply(df,2,IQR) 例如。

我的问题是,我怎样才能将这些函数中的 多个 一起应用(真的,我想将它们全部链接在一起),以便填写一个表格,其中将有一列用于属性,然后每个函数一列(即,平均值为一列,IQR 为一列),数据框的不同属性(df 中的列)将是该表的行(列在第一列)?

【问题讨论】:

  • 不幸的是不能投票关闭作为骗子(立即被否决,哈哈)。无论如何,例如在aggregate 上存在一个问题。你也可以在*apply{}dplyr 的花哨的mutate 中进行。例如,请参阅this

标签: r function apply


【解决方案1】:

假设您的数据如下所示:

set.seed(69)
df <- data.frame(A = rnorm(5), B = rnorm(5), C = rnorm(5))

你的函数名是这样的:

funcs <- c("mean", "median", "sd", "var", "min", "max")

然后你可以像这样在lapply 中使用apply

as.data.frame(setNames(lapply(funcs, function(f) apply(df, 2, as.name(f))), funcs))
#>        mean     median        sd       var       min       max
#> A -0.3546864 -0.3348139 0.5948611 0.3538597 -0.949889 0.3743156
#> B -0.2016318 -0.9039467 1.4092795 1.9860687 -1.571073 1.4440935
#> C -0.3537707 -0.1691765 0.7955558 0.6329090 -1.311374 0.4149940

【讨论】:

    【解决方案2】:

    您可以使用tidyr::gatherdplyr::summarize

    # Toy data
    df <- data.frame(x = 1:10, y = 11:20)
    
    # Libs
    library(tidyverse)
    
    # Code
    df %>% 
        gather(var, val) %>% 
        group_by(var) %>% 
        summarize(med = median(val), mean = mean(val), iqr = IQR(val))
    

    输出:

    # A tibble: 2 x 4
      var     med  mean   iqr
      <chr> <dbl> <dbl> <dbl>
    1 x       5.5   5.5   4.5
    2 y      15.5  15.5   4.5
    

    【讨论】:

      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 2016-05-22
      • 2020-09-11
      相关资源
      最近更新 更多