53207


以下のデータフレーム ex があります。

> ex  
>  name score test rank  
>  1 john 80 0 4  
>  2 taro 60 0 3  
>  3 betty 70 NA 2  
>  4 hanako 50 0 1

testがNAのとき、rankもNAにしたいとき

> mutate(ex,rank = if_else(test == 0,true = rank,false = NA))

と入力するとエラーが出る一方、

> mutate(ex,rank = if_else(test == 0,true = rank,false = 0))

と入力すると望んだ結果が得られます。  
どうしてこのようなことになるのか、教えていただければ幸いです。


CC BY-SA 4.0
2019-03-05T06:04:04.763
53204
2019-03-05T07:19:50.410
32412
question
r
R言語　if_elseの挙動について


`dplyr::if_else()` は、引数`true`と `false`に与える型が同じでなければいけません。  
今回はrank列が実数なので、 `NA`の中でも実数を指定する`NA_real_` を与える必要があります。

`mutate(ex, rank = if_else(test == 0, true = rank, false = NA_real_))`

また、質問の

> testがNAのとき、rankもNAにしたいとき

では下記のようにするのが良いと思います。

[code]

    mutate(ex, rank = if_else(is.na(test), true = NA_real_, false = rank))
    #> # A tibble: 4 x 4
    #>   name   score  test  rank
    #>   <chr>  <dbl> <dbl> <dbl>
    #> 1 john      80     0     4
    #> 2 taro      60     0     3
    #> 3 betty     70    NA    NA
    #> 4 hanako    50     0     1
    
[/code]


CC BY-SA 4.0
2019-03-05T07:11:22.983
53207
2019-03-05T07:19:50.410
2019-03-05T07:19:50.410
6020
6020
53204
answer