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

如何在R语言中实现排名数据框的反转?

R语言实现data.frame数值反转的简便方法

先明确转换逻辑:对原data.frame的每一列,非NA数值执行 该列非NA最大值 - 当前值 + 该列非NA最小值 的计算,NA值保持不变。

方法一:基础原生R实现

不用额外安装包,直接用lapply遍历处理每一列:

df = data.frame(A = c(1, 3, 2, NA, NA),
                B = c(1, 4, 3, 2, NA),
                C = c(1, 3, 4, 5, 2))

df.inv <- as.data.frame(lapply(df, function(col) {
  non_na_vals <- na.omit(col)
  col_min <- min(non_na_vals)
  col_max <- max(non_na_vals)
  ifelse(is.na(col), NA, col_max - col + col_min)
}))

# 输出结果
df.inv

方法二:tidyverse框架简化实现

如果你习惯用dplyr这类工具,用mutate + across可以更简洁地完成:

library(dplyr)

df = data.frame(A = c(1, 3, 2, NA, NA),
                B = c(1, 4, 3, 2, NA),
                C = c(1, 3, 4, 5, 2))

df.inv <- df %>%
  mutate(across(everything(), ~ ifelse(is.na(.), NA, max(., na.rm = TRUE) - . + min(., na.rm = TRUE))))

两种方法运行后得到的df.inv都和你要求的目标结果完全一致。

内容的提问来源于stack exchange,提问作者Vinicius B. de S. Moreira

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 19:02:36