【问题标题】:finding rows which don't have NA in a particular column if it already didn't have any NA如果特定列中没有任何 NA,则在特定列中查找没有 NA 的行
【发布时间】:2015-03-08 03:58:13
【问题描述】:

我刚刚观察到,如果我的数据框中的一列不包含任何 NA 值(请参见下面的 col2)并且我在不知不觉中,尝试查找没有对应 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

【问题讨论】:

    标签: r rstudio


    【解决方案1】:

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

    例如,考虑以下情况:

    > 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 节以获得更一般的解释和解决方法。

    【讨论】:

      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-17
      • 1970-01-01
      相关资源
      最近更新 更多