【问题标题】:Find the mean of multiple columns in dplyr.... why am I getting a repeated value?在 dplyr 中查找多列的平均值......为什么我得到一个重复的值?
【发布时间】:2020-08-06 00:05:07
【问题描述】:

我有一个对象x

x <- structure(list(ID = c("id1", "id2", "id3", "id4", 
"id5", "id6"), FC_C1 = c(1.0237284417215, -1.17547380888546, 
1.24032256483382, -1.26788878671502, -1.02667652234543, 1.08328144665509
), FC_C2 = c(-1.05037736352335, -1.51035519579208, 1.73843567887288, 
-1.06460883435243, -1.1937810921512, 1.32473926867105), FC_C3 = c(-1.04105748916685, 
-1.10813259308926, 1.33943213640751, -1.08323491305538, 1.0928771895575, 
1.20931550695441)), row.names = c(NA, 6L), class = "data.frame")

> x
   ID     FC_C1     FC_C2     FC_C3
1 id1  1.023728 -1.050377 -1.041057
2 id2 -1.175474 -1.510355 -1.108133
3 id3  1.240323  1.738436  1.339432
4 id4 -1.267889 -1.064609 -1.083235
5 id5 -1.026677 -1.193781  1.092877
6 id6  1.083281  1.324739  1.209316

我想要一个名为FC_average 的新列,它是前三列(每一行)的平均值。

但是,当我运行这个函数时:

meta_x <- x %>% 
    dplyr::mutate(
        FC_average = mean(c(
            FC_C1,
            FC_C2,
            FC_C3)
        ))

我明白了:

> meta_x
   ID     FC_C1     FC_C2     FC_C3  FC_average
1 id1  1.023728 -1.050377 -1.041057 -0.08163635
2 id2 -1.175474 -1.510355 -1.108133 -0.08163635
3 id3  1.240323  1.738436  1.339432 -0.08163635
4 id4 -1.267889 -1.064609 -1.083235 -0.08163635
5 id5 -1.026677 -1.193781  1.092877 -0.08163635
6 id6  1.083281  1.324739  1.209316 -0.08163635

为什么FC_average 列没有找到每行的平均值?

【问题讨论】:

  • mutate 之前加入rowwise() %&gt;% 行...

标签: r dplyr


【解决方案1】:

我们可以使用矢量化的rowMeans 代替mean

library(dplyr)
x %>% 
    mutate(FC_average = rowMeans(select(., starts_with('FC'))))

【讨论】:

    【解决方案2】:

    apply() 可用于跨行或列迭代任何函数。如果你想要每一行的平均值,你可以使用这个代码:

    apply(x[,2:4], 1,mean) -> x$FC_average
    

    如果出于某种原因您想要列表示,您可以将 1 更改为 2,如下所示:

    apply(x[,2:4], 2, mean)
    

    在您的代码中,您要求mutate() x 提供一个新列,该列是单个值——这三列的平均值,或-0.08163635。以下是您如何将现有代码与rowwise()一起使用

    x %>% 
      rowwise(.) %>% dplyr::mutate(
        FC_average = mean(c(
          FC_C1,
          FC_C2,
          FC_C3)
        ))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-28
      • 2018-07-12
      • 2017-09-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2013-10-09
      • 1970-01-01
      相关资源
      最近更新 更多