金魚亭日常

読書,ガジェット,競技プログラミング

dplyr::if_else で NA に置換

data.frame の各列のデータ型は同じでないといけない.

NAlogical なので,dplyr::mutatedouble の列の一部を NA で置換しようとするとエラーになる.

library(dplyr, warn.conflicts = FALSE)                       
data.frame(name=c("a", "b", "c"), value=c(1.2, 3.4, 5.6)) %>%
mutate(value=if_else(name=="b", NA, value))                  
#> Error in mutate_impl(.data, dots): Evaluation error: `false` must be type logical, not double.

なので NA_real_ とかを使う.

library(dplyr, warn.conflicts = FALSE)                       
data.frame(name=c("a", "b", "c"), value=c(1.2, 3.4, 5.6)) %>%
mutate(value=if_else(name=="b", NA_real_, value))            
#>   name value
#> 1    a   1.2
#> 2    b    NA
#> 3    c   5.6