不明白为什么if-else for循环不起作用

时间:2019-08-06 17:45:25

标签: r for-loop

似乎无法找到此呼叫出了错的地方。我正在尝试创建一个新列来显示获得的幻想点,而“好” field_goal_result的kick_distance确定了这一点。

for (i in 1:nrow(kickers)) {
 if (kickers$field_goal_result[i] == "good" & kickers$kick_distance[i] < 40) {
   kickers$fantasy_points_added[i] <- 3 
 } else if (kickers$field_goal_result[i] == "good" & kickers$kick_distance[i] > 39 & kickers$kick_distance[i] < 50) {
     kickers$fantasy_points_added[i] <- 4
   } else if (kickers$field_goal_result[i] == "good" & kickers$kick_distance[i] > 49) {
     kickers$fantasy_points_added[i] <- 5
   } else {
   kickers$fantasy_points_added[i] <- NA
 }
}

Error in if (kickers$field_goal_result[i] == "good" & kickers$kick_distance[i] <  : 
  missing value where TRUE/FALSE needed

1 个答案:

答案 0 :(得分:3)

执行此操作的更好方法是使用嵌套的ifelse

kickers$fantasy_points_added <- ifelse(
  kickers$field_goal_result == "good" & kickers$kick_distance < 40, 
  3,
  ifelse(
    kickers$field_goal_result == "good" & kickers$kick_distance > 39 & kickers$kick_distance < 50,
    4,
    ifelse(
      kickers$field_goal_result == "good" & kickers$kick_distance > 49,
      5, 
      NA
    )
  )
)

或使用dplyr的{​​{1}}:

case_when