【问题标题】:Quickest conversion of char to optional boolean in RR中将char最快转换为可选布尔值
【发布时间】:2018-09-06 18:33:22
【问题描述】:

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

有人对更有效的方法有什么建议吗?

【问题讨论】:

  • 随便x == "Y"
  • 使用 stringsAsFactors == FALSE 这样你就没有转换成因子和从因子转换的开销

标签: r dplyr


【解决方案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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多