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
)
)
)
或使用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
)
推荐阅读
- matlab - 对 4 个 Matlab 数组的所有可能行求和
- javascript - React - 从数组中删除项目而不是重新渲染列表
- python - 需要有关制作直方图的建议
- unix - 直接从 Tcpdump 输出中提取 IP
- python - Python 3.8 - concurrent.futures.ProcessPoolExecutor 性能随时间下降
- python - 函数 __annotations__ dict 具有仅位置参数在位置或关键字参数之后
- java - 优化使用复合比较器和限制的数组的排序
- python-3.x - matplotlib 子图中的垂直排列
- python - 通过python函数制作“折叠列表”
- database - 如何使用 HDBC 获取完整(呃)表模式