r - 如何使用 case_when 和 mutate_all 插入变量值

标签 r dplyr case-when

我有一个看似很小的问题。我想将 mutate_all()case_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 替换为零,将值替换为 1。

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

现在我想用空白 ("") 替换 NA 值,并保留其他值。但是,我不知道如何以保留列值的方式设置 TRUE 值。

如有任何建议,我们将不胜感激!

最佳答案

要将 NA 保留为 "",我们可以使用 tidyr 中的 replace_na

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    

对于 case_whenif_else,我们必须确保 type 是相同的。在这里,当我们插入 "" 时,我们正在转换为 character,因此请确保其他值也被强制转换为 character

tbl %>%
   mutate_all(~ case_when(is.na(.) ~ "", TRUE ~ as.character(.)))

如果我们只想使用特定的列,那么我们可以使用mutate_at

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

此外,为了简化 OP 帖子中的代码,可以使用 as.integer+ 直接将其强制转换为整数

tbl %>% 
     mutate_all(~ as.integer(!is.na(.)))

或者如果我们使用case_when

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

关于r - 如何使用 case_when 和 mutate_all 插入变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59269151/

相关文章:

r - 使用 dplyr mutate 根据列名向量创建新列

MySQL 查询 - IF 或 CASE 以及 AND 和异常(exception)(用于计算)

tsql - 如何使用 case 时从 sql 返回 true 或 false

mysql - col 不为空时的 sql 情况

r - 修剪错误?未删除前导空格

r - R 数据表中最近的 "n"滚动连接

r - 使用 R 选择指定列之后的所有列

r - 由于没有数据,分组条形图列宽不均匀

r - 如何获得最后一个非零元素的位置

r - 在 R 和 dplyr 中按组滞后/领先