如何解决试图避免带有 if_else 条件的“没有非缺失参数;返回 Inf”警告不起作用
我有以下数据:
df <- data.frame(x = c(1,23,998,9991,9992,1,2,3),group = c(1,2))
df
x group
1 1 1
2 23 1
3 998 1
4 9991 1
5 9992 1
6 1 2
7 2 2
8 3 2
我现在想分别遍历每个组并保存 c(998,9992)
值范围的最小值。
这适用于第 1 组,因为第 1 组有一些在 c(998,9992) 内的值。第 2 组没有,预计会看到第 2 组的警告:
no non-missing arguments to min; returning Inf
但是,在我的代码中,我添加了一个安全网(如果其他条件),我明确告诉代码仅在满足上述值 c(998,9992) 条件时才计算最小值。即使我硬编码只取第 1 组中的最小值,我仍然收到上述错误,我不知道为什么。
library(tidyverse)
df %>%
group_by(group) %>%
mutate(test = if_else(group == 1,min(x[x %in% c(998,9992)],na.rm = TRUE),NA_real_))
结果是正确的,这不是问题:
# A tibble: 8 x 3
# Groups: group [2]
x group test
<dbl> <dbl> <dbl>
1 1 1 998
2 23 1 998
3 998 1 998
4 9991 1 998
5 9992 1 998
6 1 2 NA
7 2 2 NA
8 3 2 NA
但我原以为不会出现以下警告:
Warning message:
Problem with `mutate()` column `test`.
i `test = if_else(...)`.
i no non-missing arguments to min; returning Inf
i The warning occurred in group 2: group = 2.
为什么我仍然收到此警告?有什么方法可以保护代码,使警告不会出现(即仅将其应用于计算最小值将是有效操作的组)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。