首页 > 解决方案 > 使用 dplyr 仅对某些列执行操作

问题描述

我想将字符变量中的字符串转换为 NA。我可以这样做:

d3 <- d3 %>%
  select_if(is.character) %>%
  na_if(., "Missing") %>%
  na_if(., "not done")  

但它显然只保留数据集中的字符变量。如果我在没有 select_if 的情况下尝试它,我会收到错误消息:

> d3 <- d3 %>%
+   na_if(., "Missing") %>%
+   na_if(., "not done")  
Error in as.POSIXlt.character(x, tz, ...) : 
  character string is not in a standard unambiguous format

不知道为什么我会得到它,因为我有两个日期/时间变量,它们是 POSIXct 格式:

 $ Date                              : POSIXct, format: "2015-10-26" "2015-12-07" "2016-01-19" "2016-04-11" ...
 $ DOB                               : POSIXct, format: "1967-01-20" "1967-01-20" "1967-01-20" "1967-01-20" ...

将不胜感激一些提示。谢谢。

标签: rdplyr

解决方案


如果我们想在character列上选择性地执行此操作,同时保留其他列,请使用mutatewithacross

library(dplyr) # version 1.0.4
d3 <- d3 %>%
   mutate(across(where(is.character), ~ 
                na_if(., "Missing") %>% 
                na_if("not_done")))

在旧版本中dplyr,它将是mutate_if

d3 %>%
    mutate_if(is.character, ~ na_if(., "Missing") %>%
                              na_if("not_done"))

在较新的版本中,select_if可以替换为

d3 %>%
    select(where(is.character))

推荐阅读