【问题标题】:dplyr's removed function? Calculating a mean for several columns in the data frame in Rdplyr 的删除功能?计算R中数据框中几列的平均值
【发布时间】:2018-03-20 16:39:00
【问题描述】:

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

我也找不到其他人在 Google 上使用此“:”功能。我怀疑这个功能已经不存在了?

现在,我使用以下代码来解决问题:

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)

【问题讨论】:

    标签: r select dplyr mean


    【解决方案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)
    

    【讨论】:

    【解决方案2】:

    也许使用contains 会有所帮助,因为它用于在列中执行名称搜索,所以在您的情况下它是:select(df, contains("Mcheck5_"))

    【讨论】:

    • 您的回答也很有帮助。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 2017-12-04
    • 2020-12-16
    • 1970-01-01
    • 2016-03-03
    相关资源
    最近更新 更多