如果列中的值(在此情況下是參與者標識號)落在某個範圍內,例如,我想刪除數據框中的數據行。 61701 61721到61901 &到61929.基於列中的值範圍刪除行
我知道如何子集基於閾值例如爲:
datasetnew = dataset[dataset$X<=100, ]
數據,但不知道如何子集,並刪除使用的數字範圍的行。不確定子集是我需要的。
如果列中的值(在此情況下是參與者標識號)落在某個範圍內,例如,我想刪除數據框中的數據行。 61701 61721到61901 &到61929.基於列中的值範圍刪除行
我知道如何子集基於閾值例如爲:
datasetnew = dataset[dataset$X<=100, ]
數據,但不知道如何子集,並刪除使用的數字範圍的行。不確定子集是我需要的。
或者更簡單的實現使用只會被否定這些行!
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))]
您應該能夠通過包含小於,大於和在它們之間的所有內容來排除這些範圍。喜歡的東西:
dataset[dataset$X < 61701 | dataset$X > 61929 | (dataset$X > 61721 & dataset$X < 61901),]
或者使用subset
:
subset(dataset, X < 61701 | X > 61929 | (X > 61721 & X < 61901)
使用dplyr包:
exclude <- c(61701:61721, 61901:61929)
library(dplyr)
datasetnew <- dataset %>%
filter(!(X %in% exclude))
沒有測試,但可能一些簡單的像'數據集[(集$ X> = 61701&數據集$ X <= 61721)| (數據集$ X> = 61901&數據集$ X <= 61929),]'或'數據集[數據集$ X%在%61701:61721) (數據集$ X%,%61901:61929),]'。也許可以使用'with'來減少'dataset'調用 – 2014-09-10 12:02:36
感謝David對於數據子集的完美工作。我想要做的是從數據框中刪除這些特定的行。我應該更多地思考它! – Ash 2014-09-10 12:09:10