假设我在 R 版本 3.0.2 中构造如下数据框:
> 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
但是,这也省略了我也想返回的 Paul 和 Jane 的行。我能看到这样做的唯一方法如下:
> 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>
有没有更优雅的解决方案?
提前致谢。