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



似乎找不到这个电话出错的地方。我正在尝试制作一个新专栏来显示获得的幻想积分,而"好"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

更好的方法是使用嵌套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
)
)
)

或者使用dplyrcase_when

kickers$fantasy_points_added <- dplyr::case_when(
kickers$field_goal_result == "good" & kickers$kick_distance < 40 ~ 3,
kickers$field_goal_result == "good" & kickers$kick_distance > 39 & kickers$kick_distance < 50 ~ 4,
kickers$field_goal_result == "good" & kickers$kick_distance > 49 ~ 5,
TRUE ~ NA
)

最新更新