首页 > 解决方案 > R中将char最快转换为可选布尔值

问题描述

我正在使用 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 列可能会有所帮助)。

有没有人对更有效的方法有任何建议?

标签: rdplyr

解决方案


除了使用 a 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 

推荐阅读