dplyr的删除功能?计算R

时间:2017-10-09 12:52:11

标签: r select dplyr mean

我想计算数据框中几列的平均值。我想在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)

2 个答案:

答案 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_"))