根据列中的值范围删除行

时间:2014-09-10 11:56:18

标签: r rows subset

如果列中的值(在这种情况下是参与者标识号)落在某个范围内,我想删除 dataframe 中的数据行。 61701至61721& 61901至61929。

我知道如何根据阈值对数据进行子集化,例如:

datasetnew = dataset[dataset$X<=100, ]

但不确定如何使用一系列数字来分组和删除行。不确定子集是我需要的。

3 个答案:

答案 0 :(得分:6)

您应该能够通过包含小于,大于和介于它们之间的所有内容来排除这些范围。类似的东西:

dataset[dataset$X < 61701 | dataset$X > 61929 | (dataset$X > 61721 & dataset$X < 61901),]

或使用subset

subset(dataset, X < 61701 | X > 61929 | (X > 61721 & X < 61901)

答案 1 :(得分:6)

或者更简单的实现只是使用!

来否定这些行
dataset[with(dataset, !((X >= 61701 & X <= 61721) | (X >= 61901 & X <= 61929))), ]

或者

dataset[with(dataset, !((X %in% 61701:61721) | (X %in% 61901:61929))), ]

对于大数据集,您可以使用data.table s %between%函数

library(data.table)
setDT(dataset)[!(X %between% c(61701, 61721) | X %between% c(61901, 61929))]

答案 2 :(得分:3)

使用dplyr包:

exclude <- c(61701:61721, 61901:61929)

library(dplyr)
datasetnew <- dataset %>%
  filter(!(X %in% exclude))