2014-09-10 65 views
2

如果列中的值(在此情况下是参与者标识号)落在某个范围内,例如,我想删除数据框中的数据行。 61701 61721到61901 &到61929.基于列中的值范围删除行

我知道如何子集基于阈值例如为:

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

数据,但不知道如何子集,并删除使用的数字范围的行。不确定子集是我需要的。

+0

没有测试,但可能一些简单的像'数据集[(集$ X> = 61701&数据集$ X <= 61721)| (数据集$ X> = 61901&数据集$ X <= 61929),]'或'数据集[数据集$ X%在%61701:61721) (数据集$ X%,%61901:61929),]'。也许可以使用'with'来减少'dataset'调用 – 2014-09-10 12:02:36

+0

感谢David对于数据子集的完美工作。我想要做的是从数据框中删除这些特定的行。我应该更多地思考它! – Ash 2014-09-10 12:09:10

回答

5

或者更简单的实现使用只会被否定这些行!

dataset[with(dataset, !((X >= 61701 & X <= 61721) | (X >= 61901 & X <= 61929))), ] 

或者

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

对于一个大的数据集可以使用data.table小号%between%功能

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

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

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

或者使用subset

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

使用dplyr包:

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

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