r - 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 列可能会有所帮助)。
有没有人对更有效的方法有任何建议?
解决方案
除了使用 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
推荐阅读
- android - 如何确保布局和其他地方的android上正确/直接的尺寸缩放?
- intellij-idea - 如何在不运行整个应用程序的情况下运行 IntelliJ 的实时编辑?
- angular-material - 当父母专注时读取子元素 - 可访问性
- android - 二进制 XML 文件第 13 行:膨胀类 EditText 时出错
- grafana - Prometheus 的简单累积增量
- c - Gnu - Arm 浮点到字符串( sprintf )
- javascript - 带有返回顶部功能的 JQuery 问题
- python - 是否有任何替代方法来检查特定索引的值是否在 python 列表中为空
- react-native - 使用 PanResponder 反应本机可折叠弹性标头
- amazon-ec2 - 从浏览器看不到 ec2 托管的灯站点