我有一个包含多个列的数据框,其中包含一个诊断的信息。条目是TRUE
, FALSE
or NA
。我创建了一个向量,将这些列总结如下:如果患者在某个时间被诊断出来(TRUE
), then TRUE
,如果唯一有效的条目是FALSE
, then FALSE
如果只是缺少,那么NA
。将文本写成代码:
data.frame(a= c(FALSE, TRUE, NA, FALSE, TRUE, NA, FALSE, TRUE, NA),
b= c(FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, NA, NA, NA),
expected= c(FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, NA))
我需要逐行浏览所有列,我使用split
。不幸的是,我的数据很大,而且需要很长时间。我现在所做的是
library(magrittr)
# big example data
df <- expand.grid(c(FALSE, TRUE, NA), c(FALSE, TRUE, NA)) %>%
.[rep(1:nrow(.), 50000), ] %>%
as.data.frame() %>%
setNames(., nm= c("a", "b"))
# My approach
df$res <- df %>%
split(., 1:nrow(.)) %>%
lapply(., function(row_i){
ifelse(all(is.na(row_i)), NA,
ifelse(any(row_i, na.rm= TRUE), TRUE,
ifelse(any(!row_i, na.rm= TRUE), FALSE,
row_i)))
}) %>%
unlist()
有没有更有效的方法来解决这个任务?