my.data.frame <- subset(data , V1 > 2 | V2 < 4)
Альтернативное решение, которое имитирует поведение этой функции и будет более подходящим для включения в тело функции:
new.data <- data[ which( data$V1 > 2 | data$V2 < 4) , ]
Некоторые люди критикуют использование which
как ненужное, но оно не дает NA
ценностям отбрасывать нежелательные результаты. Эквивалент (.ie не возвращающий NA-строки для любых NA в V1 или V2) двум вариантам, показанным выше, без which
:
new.data <- data[ !is.na(data$V1 | data$V2) & ( data$V1 > 2 | data$V2 < 4) , ]
Примечание: я хочу поблагодарить анонимного участника, который попытался исправить ошибку в приведенном выше коде, исправление, которое было отклонено модераторами. На самом деле была еще одна ошибка, которую я заметил, когда исправлял первую. Условное предложение, которое проверяет значения NA, должно быть первым, если оно должно быть обработано, как я планировал, так как ...
> NA & 1
[1] NA
> 0 & NA
[1] FALSE
Порядок аргументов может иметь значение при использовании '& ".
[
нужно обернутьwhich
или использовать дополнительные!is.na
ограничения.which
. Если и V1, и V2 являются NA, вы бы получили ряд NA в этой позиции, если не указалиwhich
. Я работаю с большими наборами данных, и даже относительно небольшой процент NA действительно заполнит мой экран ненужным выводом. Некоторые люди думают, что это особенность. Я не.grepl
илиgrep
с этим, чтобы также сделать сопоставление с образцом для желаемых строк, в дополнение к этим условным обозначениям ?Вы ищете "|." См. Http://cran.r-project.org/doc/manuals/R-intro.html#Logical-vectors
источник
NA
s в кадре данных:vc <- data.frame(duzey=factor(c("Y","O","Y","D","Y","Y","O"), levels=c("D","O","Y"), ordered=TRUE), cinsiyet=c("E","E","K",NA,"K","E","K"), yas=c(8,3,9,NA,7,NA,6), Not=c(NA,1,1,NA,NA,2,1)); vc; vc[vc$cinsiyet == "E" | vc$Not < 4,]; vc[vc$cinsiyet == "E" & vc$Not < 2,]
Для полноты картины мы можем использовать операторы
[
и[[
:Несколько вариантов
df $ name эквивалентно df [["name", точный = ЛОЖЬ]]
Использование
dplyr
:Использование
sqldf
:Выход для вышеуказанных опций:
источник
sqldf
Пакет слишком хорошо. Очень удобно, особенно когдаsubset()
становится немного больно :)