【问题标题】:Obtaining mean of certain columns with specific names获取具有特定名称的某些列的平均值
【发布时间】:2018-04-28 04:16:01
【问题描述】:

我正在尝试查找某些列中值的平均值,并将其附加到新列中。

我有一个包含字符元素列表的变量,这些元素对应于某些列名。例如,

qcs <- list.files(qcDirectory)
str(qcs)
chr [1:5] "201701" "201702" "201703" "201704" 

这是一个示例数据表:

        201701  201702  201703  201704
row1    12      20      50      54
row2    15      23      45      35
row3    16      20      52      58
row4    17      13      47      48

例如,我想获取名为“201701”和“201702”的列中包含的值的平均值,因此预期输出将是:

        201701  201702  201703  201704  mean
row1    12      20      50      54      16
row2    15      23      45      35      19
row3    16      20      52      58      18
row4    17      13      47      48      15

我不能只将它应用于前 x 列,因为它们可能出现在表中的任何位置。我在想 lapply 可能是要走的路,但我不确定如何让它发挥作用。用简单的英语来说,我基本上希望函数是“对于包含在这个变量 [qcs] 中的所有列名,找到这些值的平均值。”不确定我是否需要某种循环,或者什么。我确信答案已经存在,但我是个菜鸟,在尝试应用类似的帖子时遇到了麻烦,例如 thisthis。我在想一些类似于我下面的东西,它可以成功识别要操作的正确列,但这只是平均每列中的值并输出一个列表,而不是平均相关列的行和将它们放入一个新列中。任何想法表示赞赏。

sapply(colnames(datamatrix), function(c) {
  if (c %in% qcs) datamatrix$mean = mean(test1[, c])
}) 

【问题讨论】:

    标签: r


    【解决方案1】:

    使用dplyr 并假设df 作为您的数据表,您可以这样做:

    select(df,c(201701,201702)) %>% summarise_all(mean)
    

    dplyr 为您提供了选择组列的更大灵活性,因为您可以使用 matchesstarts_withcontains 等帮助程序。

    【讨论】:

      【解决方案2】:

      这应该是一个非常适合您的情况的策略,因为(据我了解)您可能希望为几种不同的列组合计算它。

      iris 数据集为例:假设您要添加一个新列,该列的每一行是对应行的"Sepal.Width""Petal.Width" 列中的值的平均值。这是一个包含相关列名的向量(这里它们是由列名中的模式选择的,正如我所理解的那样)。

      data(iris)
      cname_pattern <- "Width"
      target_cols <- grep(cname_pattern, names(iris), value=TRUE)
      

      那你可以说

      iris[[paste0(cname_pattern, "_mean")]] <- rowMeans(iris[, target_cols])
      

      您将获得新列中每一行相关列的平均值。这应该足够灵活以适应手头的情况。如果可能在任何地方都可能缺少值,可能想在rowMeans() 中使用na.rm=TRUE

      【讨论】:

        【解决方案3】:

        这是你可以做的。将感兴趣的列存储在向量 col 中,如下所示。然后使用 apply。

        col=c('201701','201702') df$mean=apply(df[,col],1,mean)

        【讨论】:

          猜你喜欢
          • 2021-12-10
          • 2016-06-19
          • 2021-02-13
          • 2023-02-09
          • 1970-01-01
          • 2020-03-30
          • 2016-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多