【问题标题】:Use NSE in dplyr::case_when在 dplyr::case_when 中使用 NSE
【发布时间】:2017-10-18 14:04:26
【问题描述】:

我已经阅读了Programming with dplyr 文档并尝试编写一个简单的函数来包裹case_when() 函数。

library(dplyr)
data_test <- data.frame(
    a = rep(c("a", "b", "c"), each = 5),
    b = rnorm(15)
)

fun_test <- function(df, var1, var2) {

    var1 <- enquo(var1)
    var2 <- enquo(var2)

    df <- mutate(df,
                 c = case_when(
                     !!var1 == "a" ~ 1,
                     !!var1 == "b" ~ 2,
                     !!var1 == "c" ~ 3
                 ),
                 d = case_when(
                     !!var2 > 0 ~ 1,
                     !!var2 < 0 ~ 0
                 ))

    df

}

fun_test(data_test, a, b)

我希望新列 cd 将基于 ab 中的值创建,但它们只是 NA0。任何想法为什么会这样?

干杯。

【问题讨论】:

    标签: r dplyr nse


    【解决方案1】:

    !!vars 周围需要括号,所以!!var1 == "a" ~ 1 应该是(!!var1) == "a" ~ 1


    fun_test <- function(df, var1, var2) {
    
        var1 <- enquo(var1)
        var2 <- enquo(var2)
    
        df <- mutate(df,
                     c = case_when(
                         (!!var1) == "a" ~ 1,
                         (!!var1) == "b" ~ 2,
                         (!!var1) == "c" ~ 3
                     ),
                     d = case_when(
                         (!!var2) > 0 ~ 1,
                         (!!var2) < 0 ~ 0
                     ))
    
        df       
    }
    
    fun_test(data_test, a, b)
    
    #    a           b c d
    # 1  a  0.70352390 1 1
    # 2  a -0.10567133 1 0
    # 3  a -1.25864863 1 0
    # 4  a  1.68443571 1 1
    # 5  a  0.91139129 1 1
    # 6  b  0.23743027 2 1
    # 7  b  1.21810861 2 1
    # 8  b -1.33877429 2 0
    # 9  b  0.66082030 2 1
    # 10 b -0.52291238 2 0
    # 11 c  0.68374552 3 1
    # 12 c -0.06082195 3 0
    # 13 c  0.63296071 3 1
    # 14 c  1.33551762 3 1
    # 15 c  0.00729009 3 1
    

    【讨论】:

      猜你喜欢
      • 2020-09-16
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-19
      • 2019-11-20
      相关资源
      最近更新 更多