使用 "apply" 的 MIN 函数时忽略 NA 值

Ignore NA values when using MIN function of "apply"

我正在尝试获取一个由其他指定列的最小值组成的列,其中忽略了 NA 值。当我这样做时:

foo = data.frame(A = c(1, 2, 3, NA), B = c(3, NA, 2, NA), C = c(NA, 1, 2, 3))
foo$MIN = apply(foo[c("A", "B")], 1, min)

我明白了:

   A  B  C MIN
1  1  3 NA   1
2  2 NA  1  NA
3  3  2  2   2
4 NA NA  3  NA

(请注意,我添加了一个多余的“C”列来说明我希望能够指定列的要点,在本例中为 A 和 B。)

这里的问题是第 2 行中的 MIN 值为 NA,而我希望它为 2。我很高兴 MIN 在第 4 行中为 NA,因为 A和B值都有NA。但是在2和NA之间选择时,我想要2.

当整个值向量为 NA 时,您可以将 na.rm=T 添加到您的函数并设置为 NA(否则它 returns 它 returns -Inf).

my_min <- function(x) ifelse( !all(is.na(x)), min(x, na.rm=T), NA)
foo$MIN = apply(foo[c("A", "B")], 1, my_min)

输出:

   A  B  C MIN
1  1  3 NA   3
2  2 NA  1   2
3  3  2  2   3
4 NA NA  3  NA