我想计算数据框中几列的平均值。我想在dplyr包中使用':'来选择它们。变量名称为:Mcheck5_1_1,Mcheck5_2_1,...,Mcheck5_8_1(因此总共有8个)。我了解到我可以通过
选择它们select(df, Mcheck5_1_1:Mcheck5_8_1)
在Roger Pang(https://www.youtube.com/watch?v=aywFompr1F4&feature=youtu.be)教授的在线课程中,4分33秒。
然而,R抱怨道:
Error in select(df, Mcheck5_1_1:Mcheck5_8_1) :
unused argument (Mcheck5_1_1:Mcheck5_8_1)
我也找不到其他人在谷歌上使用这个':'功能。我怀疑这个功能不再存在?
现在,我使用以下代码来解决问题:
idx = grep("Mcheck5_1_1", names(df))
df$avg = rowMeans(df[, idx:idx+7], na.rm = TRUE)
(我毫不犹豫地使用数字对这些列进行索引(例如,df [138]),因为担心其正面可能会有所不同。)
但是,我觉得这个解决方案不够优雅。你能告诉我有没有其他方法可以做到这一点?现在仍然可以使用冒号(:)方法来索引我的变量只是因为我在代码中犯了一些错误?谢谢大家。
https://www.youtube.com/watch?v=aywFompr1F4&feature=youtu.be
(4:33)
答案 0 :(得分:1)
试试dplyr::select(df, Mcheck5_1_1:Mcheck5_8_1)
。这可能是一个包装冲突。有关相关问题,请参阅here。
计算每列的平均值:
library(magrittr)
library(purrr)
df %>%
dplyr::select(Mcheck5_1_1:Mcheck5_8_1) %>%
map(mean)
答案 1 :(得分:0)
使用contains
可能有所帮助,因为它曾用于在列中执行名称搜索,因此在您的情况下,它将是:select(df, contains("Mcheck5_"))