【问题标题】:Getting logicals from a simple for loop从简单的 for 循环中获取逻辑
【发布时间】:2019-07-12 17:17:02
【问题描述】:

我对使用循环有点陌生,所以请善待。

所以我有这些代码行:

isTRUE(is.na(METEO_Data[,2]))
isTRUE(is.na(METEO_Data[,3]))
isTRUE(is.na(METEO_Data[,4]))
isTRUE(is.na(METEO_Data[,5]))
isTRUE(is.na(METEO_Data[,6]))
isTRUE(is.na(METEO_Data[,7]))
isTRUE(is.na(METEO_Data[,8]))
isTRUE(is.na(METEO_Data[,9]))

我只是检查我的数据框中是否有任何 NA。

我的输出:

> isTRUE(is.na(METEO_Data[,2]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,3]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,4]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,5]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,6]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,7]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,8]))
[1] FALSE
> isTRUE(is.na(METEO_Data[,9]))
[1] FALSE

为什么这不起作用:

for (i in 2:9) {
 isTRUE(is.na(METEO_Data[,i]))
}

print(i)

输出:

> for (i in 2:9) {
+      isTRUE(is.na(METEO_Data[,i]))
+    }
> print(i)
[1] 9

【问题讨论】:

    标签: r for-loop na


    【解决方案1】:

    你需要在循环内打印

    print(isTRUE(is.na(METEO_Data[,i])))
    

    【讨论】:

      【解决方案2】:

      不推荐 OP 尝试检查他的数据中是否有任何NAs 的方式。

      示例数据

      (dat <- data.frame(col1 = c(1, NA, NA, 2),
                         col2 = 3))
      #  col1 col2
      #1    1    3
      #2   NA    3
      #3   NA    3
      #4    2    3
      

      OP使用isTRUE的方法

      for (i in 1:2) {
        print(isTRUE(is.na(dat[,i])))
      }
      # [1] FALSE
      # [1] FALSE
      

      您可以使用anyNA 代替isTRUE,也可以使用sapply 代替for 循环,但这取决于您

      sapply(dat, anyNA)
      # col1  col2 
      # TRUE FALSE
      

      感谢@Gregor!

      如果您需要每列的NAs 的数量,您可以尝试

      sapply(dat, function(x) sum(is.na(x)))
      # col1 col2
      #    2    0
      

      或者更高效

      colSums(is.na(dat))
      #col1 col2 
      #   2    0 
      

      【讨论】:

        【解决方案3】:

        当您打印i 时,您正在打印迭代次数。 如果您想检查所有数据框的NA,只需使用is.na(df)

        【讨论】:

          猜你喜欢
          • 2012-02-29
          • 2016-07-11
          • 1970-01-01
          • 1970-01-01
          • 2018-01-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多