2013-08-12 4 views
3

내 데이터 프레임에서 첫 번째 열이 하나의 요소이며 특정 값이 인 factorname (값이있는 경우) 행을 삭제하려고합니다. 나는 시도했다 :특정 데이터가 포함 된 행을 제거하십시오.

df <- df[-grep("factorname",df$parameters),] 

어느 것이 목표가 된 요인 이름이 존재할 때 잘 작동한다. 그러나 사실 이름이 없으면이 명령은 데이터 프레임을 파괴하고 0 행을 남겨 둡니다. 그래서 시도 :

df <- df[!apply(df, 1, function(x) {df$parameters == "factorname"}),] 

불쾌한 줄을 제거하지 않습니다. factorname의 존재 여부를 테스트하고 factorname이 인 경우 줄을 제거하려면 어떻게해야합니까?

+0

을 당신은 또한 설명 된 위험 사용에 적용 '- 어떤 (...) 전략. –

+0

아마'df [! apply (df, 1, function (x) {x [ '매개 변수'] == "factorname"})]로 성공했을 것입니다. 각 적용 반복마다 "=="에 대해 전체 벡터를 보내는 대신 각 행에 하나의 값만 테스트하면됩니다. –

답변

6

당신은 사용할 수 있습니다

df[ which(! df$parameter %in% "factorname") , ] 

(%in%를 사용하는 것이 여러 제외 기준에 더 일반화 것이기 때문이다.) 또한 가능 :

df[ !grepl("factorname", df$parameter) , ] 
+2

'df [df $ parameters! = "factorname",]'충분하지 않습니까? 여기에 누락 된 복잡성은 무엇입니까? – thelatemail

+0

예. 명백한를 내려다 보아라. thelatemail이 말한 것. –

2
l<-sapply(iris,function(x)is.factor(x)) # test for the factor variables 
>l 
Sepal.Length Sepal.Width Petal.Length Petal.Width  Species 
     FALSE  FALSE  FALSE  FALSE   TRUE 

m<-iris[,names(which(l=="TRUE"))]) #gives the data frame of factor variables only 
iris[iris$Species !="setosa",] #generates the data with Species other than setosa 



    > head(iris[iris$Species!="setosa",]) 
    Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
51   7.0   3.2   4.7   1.4 versicolor 
52   6.4   3.2   4.5   1.5 versicolor 
53   6.9   3.1   4.9   1.5 versicolor 
54   5.5   2.3   4.0   1.3 versicolor 
55   6.5   2.8   4.6   1.5 versicolor 
56   5.7   2.8   4.5   1.3 versicolor 
+1

모두'sapply'이고 하위 쿼리는 정말 간단한 쿼리에 필수적입니까? 내가 R로 시작한다면 나는 핵심 라인에 도착할 때 완전히 혼란스러워 할 것입니다. – thelatemail

+0

동의; 나는 OP가 모든 요인 변수를 검사하고 있다고 생각했습니다. – Metrics

관련 문제