如何在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
相关产品推荐
相关产品推荐

