簡體   English   中英

For循環未遍歷向量中的所有值

[英]For loop not iterating through all values in vector

我試圖將多個時間序列的每年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

關於第三循環有兩個問題:

  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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM