在R中最快将char转换为可选布尔值

时间:2018-09-06 18:33:22

标签: r dplyr

我正在使用dplyr与R处理一些数据。

我要导入的数据基于CSV并使用readr导入。

我有很多列,其中“ Y”代表TRUE,“ N”代表FALSE,而NA则为空。

当前,我将它们作为因素,然后使用dplyr :: mutate_at通过以下功能转换所有受影响的列:

factor_to_logical_y_na_n <- function(x) {
  dplyr::case_when(
    x == "Y" ~ TRUE,
    is.na(x) ~ NA,
    TRUE ~ FALSE)
}

我怀疑,虽然有一种更有效的方法(使用300,000行和400列可能会有所帮助)。

有人对采用更有效的方法有任何建议吗?

1 个答案:

答案 0 :(得分:1)

我们可以直接使用package来转换为逻辑向量,而不必使用==,而NA的值将保留NA,而所有其他不为“ Y”变成FALSE

factor_to_logical <- function(x) x == "Y"

基准

set.seed(24)
x1 <- sample(c(LETTERS[20:26], NA), 1e7, replace = TRUE)
system.time(factor_to_logical_y_na_n(x1))
#  user  system elapsed 
# 0.923   0.158   1.080 
system.time(factor_to_logical(x1))
#   user  system elapsed 
#  0.074   0.003   0.077