2013-03-06 2 views
0

у меня есть набор данных, который выглядит, как это, за исключением того, что это гораздо больше и гораздо больше значений:удалить значения из набора данных на основе вектора этих значений

dataset <- data.frame(grps = c("a","b","c","a","d","b","c","a","d","b","c","a"), response = c(1,4,2,6,4,7,8,9,4,5,0,3)) 

В R, я хотел бы, чтобы удалить все строки, содержащие значения «B» или «C» с использованием вектора значений для удаления, т.е.

remove<-c("b","c") 

фактический набор данных очень длинный со многими сотнями значений, чтобы удалить, поэтому удаление значения от одного за другим будет быть очень трудоемким.

+1

FYI: Старайтесь не использовать термин «фактор» таким образом. (Вы сделали это и в своем предыдущем вопросе.) «Фактор» означает что-то очень специфическое в R, и это не так. Введите '? Factor', чтобы понять, что я имею в виду. – joran

ответ

1

Там также subset:

subset(dataset, !(grps %in% remove)) 

... который на самом деле просто оберткой [, что позволяет пропускать писать dataset$ снова и снова, когда существует несколько критериев субпопуляции , Но, поскольку страница справки предупреждает:

Это функция удобства, предназначенная для интерактивного использования. Для программирования лучше использовать стандартные функции подмножества, такие как '[', и, в частности, нестандартная оценка аргумента «подмножество» может иметь непредвиденные последствия.

У меня никогда не было никаких проблем, но большая часть моего кода R является скриптом для моего собственного использования с относительно статическими входами.


2013-04-12

я теперь имел проблемы. Если вы создаете пакет для CRAN, R CMD check будет бросать ПРИМЕЧАНИЕ, если вы используете subset таким образом в своем коде - он задается вопросом, является ли grps глобальной переменной, хотя subset оценивает ее в пределах dataset 's environment (not глобальный). Поэтому, если есть вероятность, что ваш код окажется в пакете, и вы чувствуете брезгливость в отношении NOTE, придерживайтесь метода Rcoster.

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