【问题标题】:Perform action on only some columns using dplyr使用 dplyr 仅对某些列执行操作
【发布时间】:2021-03-23 07:39:39
【问题描述】:

我想将字符变量中的字符串转换为 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" ...

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    如果我们想在 character 列上选择性地执行此操作,而其他列保持不变,请使用 mutateacross

    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))
    

    【讨论】:

      猜你喜欢
      • 2017-12-22
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 2021-09-01
      • 2020-10-29
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多