找到在特定列中没有NA的行,如果它已经没有任何NA

时间:2015-03-08 03:58:14

标签: r rstudio

我刚观察到,如果我的数据框中的一列不包含任何NA值(请参阅下面的第2列),并且我在不知不觉中尝试查找没有相应col2值的行作为NA,下面的代码给出我是一个空的输出。

请参阅下面的col1,因为它至少有一个NA值。 这同样适用于col2

> col1 = c(1,1,1,1,NA)
> col2 = c(2,2,2,2,2)
> df = data.frame(col1,col2)
> df
  col1 col2
1    1    2
2    1    2
3    1    2
4    1    2
5   NA    2
> df[-which(is.na(df$col1)),]
  col1 col2
1    1    2
2    1    2
3    1    2
4    1    2
> df[-which(is.na(df$col2)),]
[1] col1 col2
<0 rows> (or 0-length row.names)

我能够让它按照以下方式工作,但只是想知道上述行为是否合适?

> df[which(! is.na(df$col2)),]
  col1 col2
1    1    2
2    1    2
3    1    2
4    1    2
5   NA    2

1 个答案:

答案 0 :(得分:3)

问题不仅限于NA。如果索引向量为空,则会发生这种情况。 希望是将返回整个向量,但实际上,x[numeric(0)](由长度为x的向量索引的0)返回一个空向量。 / p>

例如,请考虑以下事项:

> df[ c(-1), ] # Negative indexing
  col1 col2
2    1    2
3    1    2
4    1    2
5   NA    2
> df[ c(), ] # numeric(0)
[1] col1 col2
<0 rows> (or 0-length row.names)
> df[ c(1), ] # Positive indexing
  col1 col2
1    1    2

有关更一般的解释和解决方法,请参阅R inferno中的8.1.13节。