如何在R语言中将数据框按列最值整理为目标格式的新数据框?
解决方法
你已经成功获取了各列的最值,接下来可以用以下几种方式整理成目标格式的数据框:
方法一:基于你已有的计算结果(基础R)
你已经得到了df_min和df_max两个向量,直接用rbind()合并后转为数据框,再设置行名即可:
# 你已有的代码 sample<-c("A", "B", "C", "D") x<-c(1,2,7,1) y<-c(1,5,4,2) df <- data.frame(sample,x,y) df_min <- apply(df[, c(2,3)], 2, FUN = min, na.rm = TRUE) df_max <- apply(df[, c(2,3)], 2, FUN = max, na.rm = TRUE) # 整理成目标格式 result_df <- data.frame(rbind(df_min, df_max)) rownames(result_df) <- c("min", "max") # 查看结果 print(result_df)
运行后会输出:
x y min 1 1 max 7 5
方法二:一步完成计算与整理(基础R)
可以直接用sapply()计算最值,再转置并设置行名,省去单独计算min和max的步骤:
result_df <- t(sapply(df[, c(2,3)], function(col) c(min = min(col), max = max(col)))) result_df <- as.data.frame(result_df) print(result_df)
方法三:使用dplyr包(tidyverse风格)
如果你习惯用tidyverse工具链,可以用dplyr的函数一步生成:
library(dplyr) result_df <- df %>% select(x, y) %>% # 只保留需要计算的列 summarise(across(everything(), list(min = min, max = max))) %>% # 计算每列的min和max t() %>% # 转置数据 as.data.frame() %>% rownames_to_column() %>% separate(rowname, into = c("var", "stat"), sep = "_") %>% # 拆分行名 pivot_wider(names_from = var, values_from = V1) %>% # 重塑为宽格式 column_to_rownames("stat") # 设置行名为min/max print(result_df)
内容的提问来源于stack exchange,提问作者Servus
相关产品推荐
相关产品推荐

