如何在R中按条件删除行?求which反向用法及subset问题解决
解决R语言中删除指定条件行的问题
一、which函数的反向用法
直接在目标删除条件前加**感叹号!**就能实现反向筛选,也就是保留不符合条件的行(等同于删除符合条件的行)。
比如你原本保留10-50岁行的代码是:
data <- data[which(data$age>10 & data$age<50),]
若要删除10-50岁的行,只需修改为:
data <- data[which(!(data$age>10 & data$age<50)),]
这里!(data$age>10 & data$age<50)代表“年龄≤10 或 年龄≥50”,用which包裹的作用是自动剔除NA值(如果数据里存在缺失的年龄,which会忽略对应的逻辑NA,避免出现无效的NA行)。
如果你的数据中没有NA值,也可以省略which,直接写:
data <- data[!(data$age>10 & data$age<50),]
二、用subset函数删除指定行
你之前的subset代码是保留男性行,要删除男性行的话,同样在条件前加!即可:
data2 <- subset(data1, gender != 'male') # 也可以用括号包裹原条件再否定,效果完全一致 data2 <- subset(data1, !(gender == 'male'))
subset函数的第二个参数是保留条件,把原保留条件取反,就等价于删除该条件对应的行。
额外补充个实用技巧:如果需要删除满足多个条件的行,比如同时删除男性和年龄>50的行,直接组合否定条件就行:
data2 <- subset(data1, !(gender == 'male' | age > 50))
内容的提问来源于stack exchange,提问作者Devi Sita
相关产品推荐
相关产品推荐

