如何在R语言中使用which语句避免生成空数据框
解决方法
问题出在which()返回空向量时,-which(...)会变成空索引,导致取出空数据框。以下几种方法可以解决这个问题:
方法1:直接用逻辑索引(推荐)
不用which(),直接用不等于的逻辑条件——当数据里没有目标值时,所有行的判断结果都是TRUE,自然返回原数据:
x = c("a", "a", "a", "b", "b", "b") z = as.numeric(c(8,8,8,8,8,8)) data_input = data.frame(cbind(x, z)) # 过滤"c",不存在则返回原数据 data_input[data_input$x != "c", ]
方法2:使用subset函数
subset()函数会自动处理无匹配的情况,写法更简洁:
subset(data_input, x != "c")
方法3:保留which的写法(按需选择)
如果一定要用which(),可以先判断匹配结果的长度,再决定取反还是保留全部行:
filter_idx = which(data_input$x == "c") if (length(filter_idx) > 0) { data_input[-filter_idx, ] } else { data_input }
内容的提问来源于stack exchange,提问作者LaTeXFan
相关产品推荐
相关产品推荐

