Пусть я построить кадр данных следующим образом в R версии 3.0.2:Выбор строк из кадра данных R
> name <- c("Bob", "Mary", "John", "Sue", "Paul", "Jane", "Steve")
> age <- c(32, NA, NA, 27, 40, 50, 10)
> sex <- c("M", "F", "M", "F", NA, "F", "M")
> city <- c("New York", "London", "Sao Paulo", "Mumbai", "Sydney", NA, "Beijing")
> census <- data.frame(name, age, sex, city)
> census
name age sex city
1 Bob 32 M New York
2 Mary NA F London
3 John NA M Sao Paulo
4 Sue 27 F Mumbai
5 Paul 40 <NA> Sydney
6 Jane 50 F <NA>
7 Steve 10 M Beijing
Я хотел бы, чтобы извлечь все строки, где «возраст» больше, чем 30 и не NA. Не имеет значения, имеют ли другие столбцы NA. Если я пытаюсь
> na.omit(census[c(census$age>30),])
я получаю следующее:
name age sex city
1 Bob 32 M New York
Однако, это также опускает строки для Пола и Джейн, которые я хотел бы вернуться. Единственный способ, которым я это вижу, заключается в следующем:
> foo <- complete.cases(census$age)
> bar <- census[foo, ]
> bar[c(bar$age > 30), ]
name age sex city
1 Bob 32 M New York
5 Paul 40 <NA> Sydney
6 Jane 50 F <NA>
Есть ли более элегантное решение для этого?
Заранее спасибо.
Brilliant! Спасибо за быстрый ответ! – Samir