【问题标题】:For loop not iterating through all values in vectorFor循环没有遍历向量中的所有值
【发布时间】:2016-07-19 15:07:30
【问题描述】:

我正在尝试对多个时间序列的每年的 NA 值求和。我创建了一个仅包含我的日期的向量,然后将其与日期和臭氧值的向量进行比较。我首先创建了一个 for 循环,它遍历我的日期向量的所有日期以仅提取年份。然后,我将年份向量与臭氧和日期值向量中的年份进行比较(这是我的问题所在),然后我希望将每年放入一个向量中并对 NA 值求和。当我尝试遍历日期臭氧向量中的年份时,我要么创建了一个无限循环,要么只提取了第一个变量。

我尝试了几种不同的方法来迭代日期和时间的向量,但我非常卡住。下面列出了我尝试过的其他事情以及我的代码:

totalNA <- c()
for (i in npsfiles[1]) {
  timeozone <- import(i, date="DATE", date.format = "%m/%d/%Y", header=TRUE, na.strings="-999")
  O3 <- c(timeozone$O3)
  tyr <- substr(timeozone$date, 1, 10)
  ozone <- O3
  names(ozone) <- tyr
  for (d in as.character(tyr)) {
    theyears <- format.Date(d, "%Y")
    print(theyears)
    for (y in length(ozone)) {
      if (names(ozone[y]) == theyears) {
      totalNA <- c(totalNA, ozone[y])}
      print(y)
      }
  }   
} 

我的问题在于第三个 for 循环。我也试过:

for (y in seq(1:length(ozone))
for (y in ozone)
for (y in names(ozone))  

这是一些数据:

ABBR            DATE         O3
BADL-VC 10/01/1987 02   -999
BADL-VC 10/01/1987 03   -999
BADL-VC 01/01/1989 10   12
BADL-VC 01/01/1989 11   13
BADL-VC 01/01/1989 12   14

【问题讨论】:

  • import() 是什么包?请包括任何图书馆声明。
  • 进口是露天的,我认为这是唯一使用的包。

标签: r for-loop


【解决方案1】:

关于第三个循环有两个问题:

  1. 设置循环范围时,需要用冒号设置开头到结尾。所以length(ozone) 应该是1:length(ozone)。否则,您只迭代最后一个臭氧项。
  2. names(ozone) 返回完整日期而不是年份。因此,您需要像使用 theyears 一样格式化这些元素。

考虑对第三个循环进行如下调整:

for (y in 1:length(ozone)) {
    ozoneyear <- format.Date(names(ozone[y]), "%Y")
    if (ozoneyear == theyears) {
      totalNA <- c(totalNA, ozone[y])
    }
    print(y)
}

【讨论】:

  • 如果臭氧像臭氧
猜你喜欢
  • 1970-01-01
  • 2015-07-24
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多