【问题标题】:Ignore NA values when using MIN function of "apply" [duplicate]使用“应用”的 MIN 函数时忽略 NA 值 [重复]
【发布时间】:2022-01-14 01:15:21
【问题描述】:

我试图从忽略 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。我很高兴第 4 行中的 MIN 是 NA,因为 A 和 B 值都有NA。但是在 2 和 NA 之间选择时,我想要 2。

【问题讨论】:

  • foo$MIN = apply(foo[c("A", "B")], 1, min, na.rm = TRUE)
  • na.rm = TRUE 添加到您的申请中。所有参数都推送到函数调用,请参阅help(apply)help(min)
  • 添加 na.rm=T 是不够的,因为 OP 希望第 4 行是 NA,而不是 -Inf

标签: r dataframe apply min na


【解决方案1】:

您可以将na.rm=T 添加到您的函数中,并在值的整个向量为NA 时设置为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

【讨论】:

    猜你喜欢
    • 2021-02-23
    • 2018-04-24
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多