2014-09-10 89 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))