2013-08-12 3 views
3

В моем кадре данных первый столбец является фактором, и я хочу удалить строки, которые имеют определенное значение factorname (когда значение присутствует). Я пробовал:удалять строки, содержащие определенные данные

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

Что хорошо работает, когда присутствует целевое имя фактора. Однако, если factorname отсутствует, эта команда уничтожает фрейм данных, оставляя его с 0 строками. Поэтому я пробовал:

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

, который не удаляет оскорбительные строки. Как я могу проверить наличие factorname и удалить строку, если factorname присутствует?

+0

Опасности вы иллюстрирующая также относится к использованию стратегию «-which (...)». –

+0

Возможно, успех с 'df [! Apply (df, 1, function (x) {x ['parameters'] ==" 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

Смежные вопросы