【问题标题】:How to ignore NA in a for loop如何在 for 循环中忽略 NA
【发布时间】:2019-09-11 02:43:25
【问题描述】:

我在 lubridate 中有一个时间间隔向量,其中混合了一个 NA 值,如下所示。我有第二个数据框,其中包含一分钟一分钟的数据。我正在尝试编写一个 for 循环来运行间隔,并且只包含每个间隔内的时间戳。

timespan
2016-05-24 11:05:00 UTC--2016-05-24 11:07:59 UTC
2016-05-24 11:08:00 UTC--2016-05-24 11:10:59 UTC
2016-05-24 11:11:00 UTC--2016-05-24 11:13:59 UTC
2016-05-24 11:18:00 UTC--2016-05-24 11:22:59 UTC
2016-05-24 11:26:00 UTC--2016-05-24 11:30:59 UTC
2016-05-24 11:32:00 UTC--2016-05-24 11:36:59 UTC
2016-05-24 11:40:00 UTC--2016-05-24 11:44:59 UTC
2016-05-24 11:47:00 UTC--2016-05-24 11:51:59 UTC
2016-05-24 11:53:00 UTC--2016-05-24 11:57:59 UTC
2016-05-24 11:59:00 UTC--2016-05-24 12:03:59 UTC
2016-05-24 12:11:00 UTC--2016-05-24 12:12:59 UTC
NA
2016-05-24 12:18:00 UTC--2016-05-24 12:22:59 UTC

除了一个 NA 值之外,我的代码有效。

ref = list()
for (i in 1:nrow(df)) {
  ifelse (!is.na(timespan), ref[[i]] <- df[ACC$Timestamp %within% timespan[i], ], NA)
 }

我的 ref 列表是正确的,除了倒数第二个值,它保留了 df 中的所有行,当我最终将列表绑定在一起时,所有的行都会抛出。

感谢您的帮助!

编辑:

dput(timespan)
new("Interval", .Data = c(179, 179, 179, 299, 299, 299, 299, 
299, 299, 299, 119, NA, 299), start = structure(c(1464087900, 
1464088080, 1464088260, 1464088680, 1464089160, 1464089520, 1464090000, 
1464090420, 1464090780, 1464091140, 1464091860, NA, 1464092280
), tzone = "UTC", class = c("POSIXct", "POSIXt")), tzone = "UTC")

【问题讨论】:

    标签: r for-loop na


    【解决方案1】:

    这行得通吗:

    ref = list()
    for (i in 1:nrow(df)) {
      if (!is.na(timespan[i])){
           ref[[i]] <- df[ACC$Timestamp %within% timespan[i], ]
          } else
            ref[[i]] <- NA
     }
    

    【讨论】:

    • 发生同样的问题
    • 由于某种原因,当我重新启动我的程序时它工作了。感谢您的帮助!
    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 2017-04-29
    • 1970-01-01
    • 2016-12-24
    • 2021-05-20
    • 2021-12-19
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多