【问题标题】:Use filter multiple times for average calculation多次使用过滤器进行平均计算
【发布时间】:2022-11-29 04:09:08
【问题描述】:

我需要多次使用 filter 函数(或者其他一些替代方法)来根据指定的条件计算平均值。

这是数据集:

df <- data.frame(id = c(1,2,3,4,5,6,7), 
                 cond = c("Y", "Y", "N", "Y", "N", "Y", "N"), score = c(3,4,5,2,1,2,9))

我需要分别计算 cond=Ycond=N 的平均值,然后将此平均值列附加到原始数据集,如下所示:

  id cond score  average
1  1    Y     3   2.75
2  2    Y     4   2.75
3  3    N     5   5
4  4    Y     2   2.75
5  5    N     1   5
6  6    Y     2   2.75
7  7    N     9   5

【问题讨论】:

    标签: r if-statement dplyr data-manipulation


    【解决方案1】:

    我们可能会做

    library(data.table)
    setDT(df)[, average := mean(score), by = cond]
    

    -输出

    > df
          id   cond score average
       <num> <char> <num>   <num>
    1:     1      Y     3    2.75
    2:     2      Y     4    2.75
    3:     3      N     5    5.00
    4:     4      Y     2    2.75
    5:     5      N     1    5.00
    6:     6      Y     2    2.75
    7:     7      N     9    5.00
    

    collapse

    library(collapse)
    df$average <- fmean(df$score, df$cond, TRA = 1)
    

    【讨论】:

      【解决方案2】:

      这是一个如何使用 dplyr 执行此操作的示例

      library(dplyr)
      
      df <- data.frame(cond = c(1,1,1,2,2,2,2), score = c(3,4,5,2,1,2,9))
      
      df %>% 
        group_by(cond) %>% 
        mutate(average = mean(score, na.rm = TRUE))
      
      # A tibble: 7 x 3
      # Groups:   cond [2]
         cond score average
        <dbl> <dbl>   <dbl>
      1     1     3     4  
      2     1     4     4  
      3     1     5     4  
      4     2     2     3.5
      5     2     1     3.5
      6     2     2     3.5
      7     2     9     3.5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-10
        • 2018-10-02
        • 1970-01-01
        • 2018-02-28
        • 2023-03-03
        • 1970-01-01
        相关资源
        最近更新 更多