[英]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.