我想使用 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)))
我怀疑这是因为我给出了字符串而不是“列”。
有人可以解释这种行为吗?什么是最好的解决方案?
最佳答案
您可以使用 rowMeans
与 select(., BL1:BL9)
;这里select(., BL1:BL9)
从 BL1
中选择列至 BL9
和 rowMeans
计算行平均值;您不能在 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/