如何解决使用 max() 函数时出现“no non-missing argument to max; returned -Inf”消息

问题描述 投票:0回答:2

当我处理以下包含 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
r
2个回答
0
投票

您可以创建自己的函数,以在所有值为 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

0
投票

找到最大值后,可以用 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)


© www.soinside.com 2019 - 2024. All rights reserved.