如何在R中动态使用!运算符或其反义,简化多数据框条件子集筛选?
简洁的动态筛选方案
以下是几种无需分支逻辑、直接通过m.true.false开关控制筛选反转的简洁方案:
方法1:逻辑相等判断
直接让筛选条件的逻辑值与m.true.false匹配,一行代码完成动态切换:m.true.false <- TRUE df.1 <- data.frame(cell.id = 1:10, predictor = runif(n = 10)) test.cells <- c(1, 4:6) # 核心筛选逻辑 subset.1 <- df.1[(df.1$cell.id %in% test.cells) == m.true.false, ]原理:当
m.true.false为TRUE时,筛选cell.id %in% test.cells结果为TRUE的行;当为FALSE时,筛选该结果为FALSE的行,刚好实现筛选逻辑反转。方法2:用ifelse生成动态逻辑向量
利用ifelse直接根据开关生成对应筛选逻辑,可读性更强:subset.1 <- df.1[ifelse(m.true.false, df.1$cell.id %in% test.cells, !(df.1$cell.id %in% test.cells)), ]方法3:利用逻辑值的数值特性
R中逻辑值会自动转为1(TRUE)和0(FALSE),通过简单运算实现取反:subset.1 <- df.1[as.logical((df.1$cell.id %in% test.cells) + m.true.false - 1), ]原理:当
m.true.false=TRUE时,运算后结果等于原逻辑值;当m.true.false=FALSE时,运算后结果等于原逻辑值的取反。
内容的提问来源于stack exchange,提问作者InColorado
相关产品推荐
相关产品推荐

