2017-10-20 4 views
4

case_when()dplyrで返すと、NAと非NAの値が返されますか? 、私はcyl >= 6のすべての値について1たい、dplyr :: case_whenは、NAsと非NAsの混在を返すことができますか?

例:

は、私は1つのステートメントに応じてNAを返すように頼むときは、しかし、別のステートメントに応じて、非NA値は、それが評価エラーをスローします単独でcyl < 6

> library("dplyr") 
> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ 1, cyl < 6 ~ NA)) 

Error in mutate_impl(.data, dots) : Evaluation error: must be type double, not logical.

の値についてNA、文の両方が細かい評価します。

この問題は、すべてのNAが返されるように要求されても、NAと非NAの混合ではありません。

例えば:cyl >= 6

> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA)) 
    cyl thing 
1 6 NA 
2 6 NA 
3 4 NA 

のすべての値の戻りNAがよさそうです。

> mtcars %>% mutate(thing = case_when(cyl >= 6 ~ NA, cyl < 6 ~ NA)) 
    cyl thing 
1 6 NA 
2 6 NA 
3 4 NA 

クール。

> mtcars[1:3,] %>% mutate(thing = case_when(cyl == 6 ~ 1, cyl < 6 ~ NA, cyl > 6 ~ NA)) 

Error in mutate_impl(.data, dots) : Evaluation error: must be type double, not logical.

クールではありません。

注意:例で返される項目は、式の末尾にあるmtcars[1:3,]から%>% select(cyl, thing)までです。

答えて

4

ここにはclassの問題があります。私たちは、第二のケースのために、

mtcars %>% 
     mutate(thing = case_when(cyl >= 6 ~ 1, 
           cyl < 6 ~ NA_real_)) 

また、数値型に一致するNA_realが必要

mtcars[1:3,] %>% 
     mutate(thing = case_when(cyl == 6 ~ 1, 
           cyl < 6 ~ NA_real_, 
           cyl > 6 ~ NA_real_)) %>% 
     select(cyl, thing) 
# cyl thing 
# 6  1 
# 6  1 
# 4 NA 
+2

うん、私はすべてのRHSSがに評価しなければならない」を参照してください*今TFMに12回*を読んだ後に同じ種類のベクターです。 –

関連する問題