R语言all()函数反向实现:如何判断多逻辑向量全为FALSE
解决R中逐元素判断多逻辑向量全为FALSE的问题
你出错的核心原因是用了all()——这个函数是对整个向量做整体判断,返回单个逻辑值(只有当所有元素都满足时才返回TRUE),所以赋值给data$oth后,整个列都会变成同一个值,自然不符合你逐行判断的需求。
下面是几种正确的实现方式:
直接用逐元素逻辑与操作
&:# 取反后逐元素与 data$oth <- !data$com & !data$edit & !data$cont # 或者直接判断每个变量为FALSE后逐元素与 data$oth <- data$com == FALSE & data$edit == FALSE & data$cont == FALSE注意要用
&而不是&&,后者也是整体判断,只会返回单个值。用
rowSums()简化操作(逻辑向量计算时TRUE=1,FALSE=0):data$oth <- rowSums(cbind(data$com, data$edit, data$cont)) == 0当三个变量全为FALSE时,行和为0,刚好符合你的条件,变量多的时候这个写法更简洁。
如果你用tidyverse系列工具,可以用
dplyr的if_all:library(dplyr) data <- data %>% mutate(oth = if_all(c(com, edit, cont), ~ . == FALSE))
R里并没有所谓的all()反向函数,关键是要区分整体判断函数和逐元素操作符/函数的差异——你需要的是逐行检查每个观测的三个变量是否全为FALSE,而非检查整个向量的所有元素是否满足条件。
内容的提问来源于stack exchange,提问作者EmilA
相关产品推荐
相关产品推荐

