[英]Find the mean of multiple columns in dplyr… why am I getting a repeated value?
我有一个 object 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
的新列,它是前三列(每行)的平均值。
但是,当我运行这个 function 时:
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
列没有找到每行的平均值?
我们可以使用向量化的rowMeans
代替mean
library(dplyr)
x %>%
mutate(FC_average = rowMeans(select(., starts_with('FC'))))
apply()
可用于跨行或列迭代任何 function。 如果你想要每一行的平均值,你可以使用这个代码:
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)
))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.