【问题标题】:R-evalue with multiple variables具有多个变量的 R 值
【发布时间】:2020-06-18 18:12:31
【问题描述】:

我有一系列变量(来自调查),其值为 (1,2,5,6)。我想将一组特定变量的值从 5 更改为 3,将 6 更改为 4。在此示例中,我只包含了我有兴趣更改的变量 Q11_1:Q11_13。示例中没有包含大约 100 个其他变量。

survey<- read_table2("Q11_1 Q11_2   Q11_3   Q11_4   Q11_5   Q11_6   Q11_7   Q11_8   Q11_9   Q11_10  Q11_11  Q11_12  Q11_13
2   5   5   2   5   5   5   5   2   5   5   2   2
1   1   1   2   2   5   5   5   1   2   2   2   1
6   5   6   6   6   6   5   6   5   6   6   6   6
6   6   6   6   6   6   6   6   6   6   6   6   6
5   6   6   6   6   6   6   6   6   6   6   6   5
6   6   6   6   6   6   6   6   5   5   6   6   5
")

我知道我可以使用 revalue 来改变这样的值:

survey$Q11_1 <- revalue(survey$Q11_1, c('5'='3','6'='4'))
survey$Q11_2 <- revalue(survey$Q11_2, c('5'='3','6'='4'))
survey$Q11_3 <- revalue(survey$Q11_3, c('5'='3','6'='4'))
survey$Q11_4 <- revalue(survey$Q11_4, c('5'='3','6'='4'))
survey$Q11_5 <- revalue(survey$Q11_5, c('5'='3','6'='4'))
survey$Q11_6 <- revalue(survey$Q11_6, c('5'='3','6'='4'))
survey$Q11_7 <- revalue(survey$Q11_7, c('5'='3','6'='4'))
survey$Q11_8 <- revalue(survey$Q11_8, c('5'='3','6'='4'))
survey$Q11_9 <- revalue(survey$Q11_9, c('5'='3','6'='4'))
survey$Q11_10 <- revalue(survey$Q11_10, c('5'='3','6'='4'))
survey$Q11_11 <- revalue(survey$Q11_11, c('5'='3','6'='4'))
survey$Q11_12 <- revalue(survey$Q11_12, c('5'='3','6'='4'))
survey$Q11_13 <- revalue(survey$Q11_13, c('5'='3','6'='4'))

有没有办法以更有效的方式应用这种重估(或其他功能)?我的解决方案似乎不必要地笨重。任何帮助表示赞赏。我希望有一个管道/dplyr 解决方案。

谢谢!!!

【问题讨论】:

    标签: r dplyr pipe tidy


    【解决方案1】:

    这是与列名“Q11”匹配的解决方案

    library(tidyverse)
    
    survey<- read_table2("Q11_1 Q11_2   Q11_3   Q11_4   Q11_5   Q11_6   Q11_7   Q11_8   Q11_9   Q11_10  Q11_11  Q11_12  Q11_13
    2   5   5   2   5   5   5   5   2   5   5   2   2
    1   1   1   2   2   5   5   5   1   2   2   2   1
    6   5   6   6   6   6   5   6   5   6   6   6   6
    6   6   6   6   6   6   6   6   6   6   6   6   6
    5   6   6   6   6   6   6   6   6   6   6   6   5
    6   6   6   6   6   6   6   6   5   5   6   6   5
    ")
    
    
    survey %>% 
      mutate(across(contains("Q11"),.fns = ~ case_when(.x == 5 ~ 3,
                                                       .x == 6 ~ 4,
                                                       TRUE ~ .x)))
    #> # A tibble: 6 x 13
    #>   Q11_1 Q11_2 Q11_3 Q11_4 Q11_5 Q11_6 Q11_7 Q11_8 Q11_9 Q11_10 Q11_11 Q11_12
    #>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>
    #> 1     2     3     3     2     3     3     3     3     2      3      3      2
    #> 2     1     1     1     2     2     3     3     3     1      2      2      2
    #> 3     4     3     4     4     4     4     3     4     3      4      4      4
    #> 4     4     4     4     4     4     4     4     4     4      4      4      4
    #> 5     3     4     4     4     4     4     4     4     4      4      4      4
    #> 6     4     4     4     4     4     4     4     4     3      3      4      4
    #> # ... with 1 more variable: Q11_13 <dbl>
    

    reprex package (v0.3.0) 于 2020-06-18 创建

    【讨论】:

    • 当我运行此代码时,它不会显示您看到的相同结果。那些 6 和 5 仍然存在……知道为什么会发生这种情况吗?
    • 你有 dplyr 1.0.0 吗?
    • 嘿,有没有办法将其限制为仅限某些组,例如,我只想在条件 ==1 时重新评估这些列。我试过调整你的代码,但没有成功。
    • 没问题,你只需要用where改变条件,你想把它作为另一个问题发布并标记我吗?
    猜你喜欢
    • 1970-01-01
    • 2020-10-02
    • 2016-09-29
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 2014-09-03
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多