r语言 - 使用 "apply" 的 MIN 函数时忽略 NA 值



我正试图从忽略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(否则返回-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

最新更新