【问题标题】:R: My dataframe has 1 column and multiple rows, is there a way to calculate the mean for certain subsets of rows?R:我的数据框有 1 列和多行,有没有办法计算某些行子集的平均值?
【发布时间】:2020-11-27 02:58:42
【问题描述】:

我下载了一个 1 列和 1000 行的数据框。数据框的组织方式是区域的名称,下面是区域对应的分数。

示例:

我想计算每个区域对应的值的平均值。

所以,例如:

区域 1:1、2、3、4 的平均值

区域 2:1,2 的平均值

等等

我不确定如何编写脚本来执行此操作并在哪里获得输出 我有一个有 2 列的表(区域,平均值)

【问题讨论】:

    标签: r excel for-loop row mean


    【解决方案1】:

    以下代码与标记组开始的字符串无关,它只取决于它们不能被强制转换为数字。

    首先,一个测试数据集。

    df1 <- data.frame(x = c("A", 1:4, "B", 1:2, "C", 1:3))
    

    现在组的意思。

    y <- suppressWarnings(as.numeric(df1[[1]]))
    i <- is.na(y)
    j <- cumsum(i)
    tapply(y[!i], j[!i], mean)
    #  1   2   3 
    #2.5 1.5 2.0 
    

    【讨论】:

      【解决方案2】:

      这是一个基本的 R 选项

      do.call(
        rbind,
        Map(
          function(v) data.frame(Region = v[1, ], Mean = mean(as.numeric(v[-1, ]))),
          split(df, cumsum(grepl("Region\\s\\d+", df$x)))
        )
      )
      

      给了

          Region Mean
      1 Region 1  2.5
      2 Region 2  1.5
      3 Region 3  2.0
      

      数据

      df <- structure(list(x = c("Region 1", "1", "2", "3", "4", "Region 2", 
      "1", "2", "Region 3", "1", "2", "3")), class = "data.frame", row.names = c(NA,
      -12L))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-21
        • 2016-03-20
        • 1970-01-01
        • 2014-11-19
        • 1970-01-01
        • 2020-12-01
        相关资源
        最近更新 更多