【问题标题】:How can I group by specific rows and calculate the mean of each column?如何按特定行分组并计算每列的平均值?
【发布时间】:2021-07-10 01:55:45
【问题描述】:

基本上我试图按天对我的值进行分组,并且我想计算每个站点(ACO、AJM 等)每天的平均值,忽略空值。

这是我的数据框的头部:

 FECHA     HORA   ACO   AJM   ATI   BJU
01/01/2019    1  -99.0 -99.0 -99.0 -99.0
01/01/2019    2  -99.0 -99.0 -99.0 -99.0
01/01/2019    3  -99.0 -99.0 -99.0 -99.0
01/01/2019    4  1.5   0.1   0.9   1.0
01/01/2019    5  1.2   0.1   0.6   1.3
01/01/2019    6  1.0   0.1   1.0   1.0

其中“FECHA”是一天,“HORA”是每天的小时。

我目前正在尝试这样做:

mdiaria2019CO <- datos2019CO %>% group_by(FECHA) %>% colMeans(datos2019CO[ , c(3:34), na.rm = T])

但 RStudio 一直告诉我“无效的 'dims'”或存在不正确的 na.rm。

如何按天(每 24 行)对所有值进行分组并计算当天每一列的平均值,忽略空值 (-99)?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    你可以使用across -

    library(dplyr)
    
    mdiaria2019CO  <- datos2019CO %>% 
                        group_by(FECHA) %>% 
                        summarise(across(ACO:BJU, ~mean(.[. != -99])))
    
    #  FECHA        ACO   AJM   ATI   BJU
    #  <chr>      <dbl> <dbl> <dbl> <dbl>
    #1 01/01/2019  1.23   0.1 0.833   1.1
    

    .[. != -99] 将忽略由-99.0 表示的缺失值。

    【讨论】:

      【解决方案2】:

      我们也可以这样

      library(dplyr)
      mdiaria2019CO <- aggregate(.~ FECHA, datos2019CO[-2], FUN = function(x)
                    mean(x[x != -99]))
      

      【讨论】:

        猜你喜欢
        • 2021-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-18
        • 1970-01-01
        • 1970-01-01
        • 2019-04-03
        • 1970-01-01
        相关资源
        最近更新 更多