r - 使用 dplyr::mutate 计算某些列的平均值

标签 r dplyr mean

我想使用 dplyr::mutate 计算某些列的平均值。

library(dplyr)
test <- data.frame(replicate(12, sample(1:12, 12, rep = T))) %>% 
`colnames<-`(seq(1:12) %>% paste("BL", ., sep = ""))

我想包括来计算平均值的列只有 BL1 到 BL9,所以我这样做
test_again <- test %>% 
rowwise() %>%
mutate(ave = mean(c(seq(1:9) %>% paste("BL", ., sep = ""))))

这行不通。我注意到如果我将列一一放置,它会起作用
test_againAndAgain <- test %>%
rowwise() %>%
mutate(ave = mean(c(BL1, BL2, BL3, BL4, BL5, BL6, BL7, BL8, BL9)))

我怀疑这是因为我给出了字符串而不是“列”。

有人可以解释这种行为吗?什么是最好的解决方案?

最佳答案

您可以使用 rowMeansselect(., BL1:BL9) ;这里select(., BL1:BL9)BL1 中选择列至 BL9rowMeans计算行平均值;您不能在 mutate 中直接使用字符向量作为列,将按原样处理而不是列:

test %>% mutate(ave = rowMeans(select(., BL1:BL9)))

#   BL1 BL2 BL3 BL4 BL5 BL6 BL7 BL8 BL9 BL10 BL11 BL12      ave
#1    5  11   1   1  12   5  10  12   6   11   12    9 7.000000
#2    1  10   5  11   7   6   5   9   9    1    8    4 7.000000
#3    8  10   1   2   7  12   5   9   5    3    3   11 6.555556
#4    5   2   5   4   9   5   5   3   5    2    8    1 4.777778
#5    9   1   1  10   3   5   1   9   9    6    3   12 5.333333
#6    9   7   9   6   3   2   5   4   9    5    1    2 6.000000
#7    3   3   1   9   7   8   7   9   9   11   12    9 6.222222
#8   12   9   3   3   9  11   4   2   5   12   12   12 6.444444
#9    1   7   7  12   6   6   5   3  10   12    5   10 6.333333
#10  12   7   7   1   2   8   5   8  11    9    1    5 6.777778
#11   9   1   5   8  12   6   6  11   3   12    3    9 6.777778
#12   5   6   1  11  10  12   6   7   8    7    8    2 7.333333

关于r - 使用 dplyr::mutate 计算某些列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50352735/

相关文章:

r - 在Rstudio和Knitr中使用观星仪

R - ggplot 躲避 geom_lines

r - tidyr::spread tidyr::pivot_wider 每个键有多个不同的值

r - pmap_dfr : Error: Element 5 is not a vector (environment) 的 multidplyr 错误

r - 如何从 R 中的数据框中选择和重命名一长串列?

一年中各天的滚动平均值

r - 对 R 中的大量变量子集应用均值插补

r - 按位置排列的列表元素的平均值

string - 输入不完整的strsplit成data.frame

arrays - 在多维数组上使用 apply