我正在使用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列可能会有所帮助)。
有人对采用更有效的方法有任何建议吗?
答案 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