使用 "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
我正在尝试获取一个由其他指定列的最小值组成的列,其中忽略了 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