【问题标题】:Using variations of `apply` in R在 R 中使用 `apply` 的变体
【发布时间】:2016-06-09 15:33:12
【问题描述】:

在研究中,我们经常需要做一个汇总表。我想在 R 中使用tapply 创建一个表。唯一的问题是我有 40 个变量,我想基本上对所有 40 个变量执行相同的操作。这是数据的示例

Age Wt  Ht  Type
79  134 66  C
67  199 64  C
39  135 78  T
92  149 61  C
33  138 75  T
68  139 71  C
95  198 62  T
65  132 65  T
56  138 81  C
71  193 78  T

基本上我想让它产生给定类型的所有变量的平均值。它应该看起来像

      C     T
Age 72.4   60.6
Wt  151.8  159.2
Ht  68.6   71.6

我尝试过使用

sapply(df, tapply(df, df$Type, mean)) 

但出现错误。

任何指导将不胜感激。

【问题讨论】:

    标签: r sapply tapply


    【解决方案1】:

    试试:

    > sapply(df[1:3], tapply, df$Type, mean)
       Age    Wt   Ht
    C 72.4 151.8 68.6
    T 60.6 159.2 71.6
    

    您也可以使用colMeans:

    > sapply(split(df[1:3], df$Type), colMeans)
            C     T
    Age  72.4  60.6
    Wt  151.8 159.2
    Ht   68.6  71.6
    

    【讨论】:

    • 现在我可以转置第一个结果,这样我就可以像第二个示例一样将 Type 的值放在顶部了吗?
    • 如果你想要转置,请将所有内容放入 t(...)
    【解决方案2】:

    你可以使用aggregate

    res <- aggregate(DF[,names(DF) != 'Type'],list(DF$Type),mean)
    > res
      Group.1  Age    Wt   Ht
    1       C 72.4 151.8 68.6
    2       T 60.6 159.2 71.6
    

    然后转置它:

    m <- t(res[-1]) # convert the data.frame (excluding first col) in a matrix and traspose it
    colnames(m) <- res[[1]] # set colnames of the matrix taking them from the data.frame 1st col
    > m
            C     T
    Age  72.4  60.6
    Wt  151.8 159.2
    Ht   68.6  71.6
    

    【讨论】:

    • 现在我可以转置第一个结果,这样我就可以像第二个示例一样将 Type 的值放在顶部了吗?
    猜你喜欢
    • 2013-04-23
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 2021-02-16
    • 2016-05-02
    相关资源
    最近更新 更多