簡體   English   中英

如果 dataframe 中有 NA,如何在 if / ifelse 中處理 NA

[英]How to deal with NA's in a if / ifelse if dataframe has NA's in it

我是 R 的新手,我今天學習了循環。 我在運行此循環時遇到問題。 dataframe 應在此處鏈接 [1]: https://i.stack.imgur.com/ZpbFG.jpg df 稱為分數,其中包含參加世界杯的主客場國家的名稱。 它還顯示了獲勝國家的名稱。 但是,當它是平局時,有一個 NA。 我嘗試使用 if (homename = Winnername) 來運行我的代碼,然后我會將 TRUE 添加到向量中,因為我正在查看主隊是否贏了。 如果不是(否則),則輸入 FALSE。 我嘗試了另一種方式,我特別提到了 NA,它給了我同樣的錯誤:

需要 TRUE/FALSE 的缺失值

但我的代碼如下,

scorevector <- c()
for (i in 1:nrow(scores)) {
  if (scores$home_country[i] == scores$win_country[i]) {
  scorevector <- c(scorevector, TRUE)
  } else if (scores$win_country[i] == NA) {
  scorevector <- c(scorevector, FALSE)
  } else {
  scorevector <- c(scorevector, FALSE)
    }
  }

這是另一個版本

scorevector <- c()
for (i in 1:nrow(scores)) {
  if (scores$home_country[i] == scores$win_country[i]) {
  scorevector <- c(scorevector, TRUE)
  } else {
  scorevector <- c(scorevector, FALSE)
    }
  }

任何幫助,將不勝感激:)

第一的。 遍歷 dataframe 的行並不是一個好主意。 相反,您可以像這樣實現您的結果:

scores <- data.frame(
  home_country = c("A", "B", "C", "D"),
  win_country = c("A", "E", NA, "D")
)

scores$scorevector <- FALSE
scores$scorevector[scores$home_country == scores$win_country] <- TRUE
scores
#>   home_country win_country scorevector
#> 1            A           A        TRUE
#> 2            B           E       FALSE
#> 3            C        <NA>       FALSE
#> 4            D           D        TRUE

要檢查您的條目是否為NA ,請使用is.na() 您的if get 一旦從 dataframe 調用NA值就會被中斷,因此它不會比較它==NA 確保,這個在最上面,因為如果你不先調用它,它會再次中斷你的if 因此,當您致電NA時,您會直接停止您的if

scorevector <- c()
for (i in 1:nrow(scores)) {
  if (is.na(scores$win_country[i])) {
  scorevector <- c(scorevector, FALSE)
  }
  else if (scores$home_country[i] == scores$win_country[i]) {
  scorevector <- c(scorevector, TRUE)
  } else {
  scorevector <- c(scorevector, FALSE)
    }
  }

由於您沒有提供可重現的示例,因此我使用內置數據集airquality進行了嘗試,它獲得了NA值。 您可以復制並運行此代碼。

df<-airquality

scorevector <- c()
for (i in 1:nrow(df)) {
  if (is.na(df$Ozone[i]) ) {
    scorevector <- c(scorevector, TRUE)
  } else {
    scorevector <- c(scorevector, FALSE)
  }
}

scorevector

暫無
暫無

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

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