You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何将数据框中Inf/-Inf替换为对应行的最大/最小值

方法1:基础R实现

直接用apply逐行遍历处理即可,计算每行排除无穷值后的最值再替换:

# 示例数据
x <- data.frame(val1 = c(1,4,5,2), val2 = c(4,2,46,2), val3 = c(Inf, 1, 4, 9), val4 = c(13, 51, 3, -Inf))

# 逐行替换
x_fixed <- t(apply(x, 1, function(row) {
  # 计算当前行排除无穷值的最大、最小值
  row_max <- max(row[is.finite(row)])
  row_min <- min(row[is.finite(row)])
  # 替换无穷值
  row[row == Inf] <- row_max
  row[row == -Inf] <- row_min
  return(row)
})) |> as.data.frame()

运行后得到的x_fixed就是你要的结果。


方法2:tidyverse风格实现

如果你习惯用dplyr,可以用rowwise()配合across()实现:

library(dplyr)

x_fixed <- x |>
  rowwise() |>
  # 先计算当前行的有效最值
  mutate(
    row_max = max(c_across(everything())[is.finite(c_across(everything()))]),
    row_min = min(c_across(everything())[is.finite(c_across(everything()))])
  ) |>
  # 替换所有列的无穷值
  mutate(across(everything(), ~case_when(
    .x == Inf ~ row_max,
    .x == -Inf ~ row_min,
    .default = .x
  ))) |>
  # 删除临时计算的最值列
  ungroup() |>
  select(-row_max, -row_min)

两种方法都能得到你给出的预期输出结果。


内容的提问来源于stack exchange,提问作者Justin Dhindsa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:39:00