当我处理以下包含 NA 的数据时,max 函数会提示警告消息。 对于以下数据df,我想计算每组的最大值。
df <- data.frame(Var_1 = c("Grp 1", "Grp 1", "Grp 1", "Grp 2", "Grp 2", "Grp 2", "Grp 3", "Grp 3", "Grp 3"),
Var_2 = c(1,2,3, NA, NA, NA, 7, NA, 9))
ck <- df %>%
group_by(Var_1) %>%
summarise(max_var = max(Var_2, na.rm = TRUE))
print(ck)
Var_1 max_var
<chr> <dbl>
1 Grp 1 3
2 Grp 2 -Inf
3 Grp 3 9
如果我不在 max 函数中添加条件
na.rm = TRUE
,则组 3 的结果为 NA。如果我添加条件 na.rm = TRUE
,则组 2 的记录将被删除,然后出现警告消息“no non-缺少 max 参数;返回 -Inf" 被抛出。
我希望的结果是
Var_1 | 最大变量 |
---|---|
组1 | 3 |
组2 | 不适用 |
组3 | 9 |
有人对如何处理此警告消息和结果有任何建议吗?谢谢。
我尝试先删除所有 NA 结果,然后使用 summarize(max()) 进行计算,但这会导致 Grp 2 消失。我想保留这个组并让结果为NA。
df <- data.frame(Var_1 = c("Grp 1", "Grp 1", "Grp 1", "Grp 2", "Grp 2", "Grp 2", "Grp 3", "Grp 3", "Grp 3"),
Var_2 = c(1,2,3, NA, NA, NA, 7, NA, 9))
ck <- df %>%
filter(!is.na(Var_2)) %>%
group_by(Var_1) %>%
summarise(max_var = max(Var_2, na.rm = TRUE))
print(ck)
Var_1 max_var
<chr> <dbl>
1 Grp 1 3
2 Grp 3 9
您可以创建自己的函数,以在所有值为 NA 的情况下返回 NA:
fn <- function(x, na.rm=FALSE) {
ifelse(all(is.na(x)), NA, max(x, na.rm = na.rm))
}
df %>%
summarise(max_var = fn(Var_2, na.rm = TRUE), .by=Var_1)
Var_1 max_var
1 Grp 1 3
2 Grp 2 NA
3 Grp 3 9
找到最大值后,可以用 NA 替换无限值。
library(dplyr)
df <- data.frame(
Var_1 = c("Grp 1", "Grp 1", "Grp 1", "Grp 2", "Grp 2", "Grp 2", "Grp 3", "Grp 3", "Grp 3"),
Var_2 = c(1, 2, 3, NA, NA, NA, 7, NA, 9) # Add more columns here as needed
)
ck <- df %>%
group_by(Var_1) %>%
summarise(across(starts_with("Var_"), ~replace(max(., na.rm = TRUE), is.infinite(max(., na.rm = TRUE)), NA)))
print(ck)