【问题标题】:How to calculate mean of values from specified rows and order it in R?如何计算指定行的平均值并在R中排序?
【发布时间】:2017-10-08 09:58:02
【问题描述】:

我有一组数据,比如t(USArrests):

          Alabama Alaska Arizona Arkansas California Colorado Connecticut
Murder      13.2   10.0     8.1      8.8        9.0      7.9         3.3
Assault    236.0  263.0   294.0    190.0      276.0    204.0       110.0
UrbanPop    58.0   48.0    80.0     50.0       91.0     78.0        77.0
Rape        21.2   44.5    31.0     19.5       40.6     38.7        11.1

我想仅为每个状态计算 MurderAssault 的平均值,并根据它们的平均值从高到低对状态进行排序。

我是 R 新手,不知道如何做到这一点。有人可以帮助我吗?谢谢!

【问题讨论】:

  • 所以你想要mean(Murder, Assault)

标签: r sorting mean


【解决方案1】:

如果你想要 MurderAssault 的平均值(假设是这种情况,因为每个状态只有 1 个 obs),你可以这样做:

sort(colMeans(df[c("Murder","Assault"),]), decreasing = T)

或者,如果您的数据确实未转置,请改用 rowMeans

sort(rowMeans(USArrests[,c("Murder","Assault")]), decreasing = T)

【讨论】:

    【解决方案2】:

    dplyr 是很好的解决方案。数据不需要t()

    library(dplyr)
    library(tibble)
    USArrests %>%
      rownames_to_column(var = "State") %>% 
      # perform operations by row
      rowwise() %>% 
      # add a column with the mean
      mutate(Mean = mean(c(Murder, Assault))) %>% 
      # should ungroup after using rowwise()
      ungroup() %>% 
      # sort by Mean descending
      arrange(desc(Mean))
    

    【讨论】:

      【解决方案3】:

      考虑使用 data.table 包:

      library(data.table)
      DT <- data.table(cbind(USArrests), State = row.names(USArrests))
      mean_stats <- DT[, list(mean_murder = mean(Murder), 
                              mean_assault = mean(Assault)), by = State]
      mean_stats[order(-mean_murder, -mean_assault)]
      

      在这里,我按降序排列结果,首先是平均谋杀率,然后是平均攻击率。但是,正如您所看到的,改变它是微不足道的。这是一些示例输出:

      > head(mean_stats[order(-mean_murder, -mean_assault)])
                  State mean_murder mean_assault
      1:        Georgia        17.4          211
      2:    Mississippi        16.1          259
      3:        Florida        15.4          335
      4:      Louisiana        15.4          249
      5: South Carolina        14.4          279
      6:        Alabama        13.2          236
      

      如果您是 R 新手,请帮自己一个忙,使用 data.table 包。一般来说,它的合并和聚合速度很快,语法简洁易懂。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-04
        • 1970-01-01
        • 1970-01-01
        • 2016-03-05
        • 2012-06-14
        • 2016-08-03
        相关资源
        最近更新 更多