【问题标题】:Getting -Inf when calculating a column with maximum values of a dataframe在计算具有数据框最大值的列时获取-Inf
【发布时间】:2020-11-15 17:34:54
【问题描述】:

我有四个变量(length1、length2、length3 和 length4)并且想在我的数据框中添加第五列,其中包含每行四个长度的最大值。 当我跑步时

length <- data.frame(length1, length2, length3, length4)
length$maximum <- apply(length, 1, max, na.rm = TRUE)

我获得了一些 -Inf 值。我猜这发生在所有变量都具有 NA 值的那些行中。我该怎么做才能用 NA 替换 length$maximum 变量中的 -Inf 值? 我试过了:

my.max <- function(x) ifelse( !all(is.na(x)), max(x, na.rm=T), NA)
length$maximum <- apply(length, 1, my.max, na.rm = TRUE)

但它似乎不起作用。

【问题讨论】:

  • 您可以使用您的第一种方法。如果您知道出现 -Inf 且仅当只有 NAs 并且您想将这些值设置为 NA,只需执行 length$maximum[!is.finite(length$maximum)] &lt;- NA

标签: r max na


【解决方案1】:

您的函数定义 - my.max 运行良好。我建议调整函数的名称 - 例如my_max.

但是,当您调用函数时,您添加了一个不需要的额外参数。下面的代码应该可以工作:

# create test data
length1 <- c(1:9, NA_integer_)
length2 <- c(2:10, NA_integer_)
length3 <- c(3:11, NA_integer_)
length4 <- c(4:12, NA_integer_)

length <- data.frame(length1, length2, length3, length4)

# define function
my_max <- function(x) ifelse( !all(is.na(x)), max(x, na.rm = TRUE), NA)

length$maximum <- apply(length, 1, my_max)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 1970-01-01
    • 2016-01-18
    • 2022-01-19
    相关资源
    最近更新 更多