R 使用mutate_all插入变量值时如何使用case_

R 使用mutate_all插入变量值时如何使用case_,r,dplyr,case-when,R,Dplyr,Case When,我似乎有个小问题。我想将mutate\u all()与case\u when()结合使用。示例数据帧: tbl <- tibble( x = c(0, 1, 2, 3, NA), y = c(0, 1, NA, 2, 3), z = c(0, NA, 1, 2, 3), date = rep(today(), 5) ) 现在我想用空格(“)替换NA值,并保持其他值不变。但是,我不知道如何设置真实值,以保持列的值 任何建议都将不胜感激 若要将NA保留为”,我们可以使用替换

我似乎有个小问题。我想将
mutate\u all()
case\u when()
结合使用。示例数据帧:

tbl <- tibble( 
  x = c(0, 1, 2, 3, NA),
  y = c(0, 1, NA, 2, 3),
  z = c(0, NA, 1, 2, 3),
  date = rep(today(), 5)
)
现在我想用空格(
)替换NA值,并保持其他值不变。但是,我不知道如何设置真实值,以保持列的值


任何建议都将不胜感激

若要将
NA
保留为
,我们可以使用
替换
from
tidyr

library(dplyr)
library(tidyr)
tbl %>%
     mutate_all(replace_na, "")
# A tibble: 5 x 3
#  x     y     z    
#  <chr> <chr> <chr>
#1 0     0     0    
#2 1     1     ""   
#3 2     ""    1    
#4 3     2     2    
#5 ""    3     3    
如果我们只想使用特定的列,那么我们可以使用
mutate\u at

tbl %>%
   mutate_at(vars(x:y), ~ case_when(is.na(.) ~ "", TRUE ~ as.character(.)))

此外,为了简化OP文章中的代码,可以使用
as.integer
+

tbl %>% 
     mutate_all(~ as.integer(!is.na(.)))
或者如果我们在

tbl %>%
       mutate_all(~ case_when(is.na(.)~ 0, TRUE ~ 1))

谢谢这就是我要找的。还有一个问题。我有几个datetime列,我不想将列的类型更改为字符。在
mutate_all()
中有什么方法可以做到这一点,或者我必须使用
mutate_if()
?@akrun接受并使用thanls快速回复!
tbl %>% 
     mutate_all(~ as.integer(!is.na(.)))
tbl %>%
       mutate_all(~ case_when(is.na(.)~ 0, TRUE ~ 1))