【问题标题】:Error in generating mean using tapply function使用 tapply 函数生成平均值时出错
【发布时间】:2020-04-01 13:42:11
【问题描述】:

您好,我已尝试从 iris 数据集中生成每个物种的 Petal.Width 和 Sepal.Width 的平均值。

但是我遇到了错误。

代码

tapply(iris$Species, iris$Petal.Width, mean)

导致 0.1 0.2 0.3 0.4 0.5 0.6 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 2.1 2.2 2.3 2.4 2.5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 有 22 个警告(使用 warnings() 来查看)

tapply(iris$Species, iris$Sepal.Length , mean) 

导致 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 6 6.1 6.2 6.3 6.4 6.5 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 6.6 6.7 6.8 6.9 7 7.1 7.2 7.3 7.4 7.6 7.7 7.9 NA NA NA NA NA NA NA NA NA NA NA NA 有 35 个警告(使用 warnings() 查看)

【问题讨论】:

    标签: r tapply


    【解决方案1】:

    你的论点是错误的方式......

    tapply(iris$Petal.Width, iris$Species, mean)
    #    setosa versicolor  virginica 
    #     0.246      1.326      2.026 
    
    tapply(iris$Sepal.Length, iris$Species, mean)
    #     setosa versicolor  virginica 
    #     5.006      5.936      6.588
    

    您是否考虑过data.table 方法?

    library(data.table)
    iris <- data.table(iris)
    
    # Calculate the mean for all columns by Species ...
    iris[, lapply(.SD, mean, na.rm = TRUE), Species]
    #      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
    # 1:     setosa        5.006       3.428        1.462       0.246
    # 2: versicolor        5.936       2.770        4.260       1.326
    # 3:  virginica        6.588       2.974        5.552       2.026
    
    

    【讨论】:

      【解决方案2】:

      tidyverse 方法

      library(tidyverse)
      
      iris %>% 
        group_by(Species) %>% 
        summarise_at(.vars = c('Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'), .funs = mean)
      
      # A tibble: 3 x 5
      #  Species    Sepal.Length Sepal.Width Petal.Length Petal.Width
      #  <fct>             <dbl>       <dbl>        <dbl>       <dbl>
      #1 setosa             5.01        3.43         1.46       0.246
      #2 versicolor         5.94        2.77         4.26       1.33 
      #3 virginica          6.59        2.97         5.55       2.03 
      

      【讨论】:

        猜你喜欢
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-29
        • 1970-01-01
        • 2022-08-18
        相关资源
        最近更新 更多