2017-10-18 15 views
0

Programming with dplyrのドキュメントを読んで、case_when()関数をラップする簡単な関数を書こうとしました。dplyr :: case_whenでNSEを使用

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) 

私はcdabの値に基づいて作成される新しい列を望んでいるが、その代わりに、彼らはただNA0です。これがなぜそのようなのでしょうか?

乾杯。

答えて

2

あなたはの周りに括弧が必要!! 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 
関連する問題