我正试图从忽略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