Reputation: 683
Just can't seem to find where this call went wrong.I'm trying to make a new column to show fantasy points earned and the kick_distance of a "good" field_goal_result determines this.
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
Upvotes: 0
Views: 40
Reputation: 35177
A better way to do this is with nested ifelse
instead:
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
)
)
)
Or using dplyr
's case_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
)
Upvotes: 3