在R语言中对数据框每行降序排序并新增列展示结果的方法
在R中实现每行数值降序排序并新增列的方法
嗨,这个需求在R里很好实现,我给你两种实用的方法,你可以根据自己的习惯来选:
第一步:先构造你的原始数据框
首先我们先把你给出的数据转换成R中的数据框:
df <- data.frame( Black = c(0.8, 0.3, 0.1), White = c(0.1, 0.6, 0.6), Red = c(0.07, 0, 0.25), Blue = c(0.03, 0.1, 0.05) )
方法一:基础R快速实现
利用apply函数按行处理,对每行数值做降序排序,再合并回原数据框:
# 对每行数据降序排序,转置后设置列名 sorted_rows <- t(apply(df, MARGIN = 1, function(x) sort(x, decreasing = TRUE))) colnames(sorted_rows) <- paste0("Color", 1:4) # 合并原数据和排序后的新列 result_df <- cbind(df, sorted_rows)
方法二:tidyverse风格实现(适合数据流程化处理)
如果你习惯用dplyr这类tidyverse工具,也可以用管道流的方式实现:
library(dplyr) library(tidyr) result_df <- df %>% # 给每行添加唯一标识,方便后续分组排序 mutate(row_id = row_number()) %>% # 将宽格式数据转为长格式 pivot_longer(-row_id, names_to = "color", values_to = "value") %>% # 按行分组,对数值降序排名并生成Color列名 group_by(row_id) %>% mutate(color_rank = paste0("Color", rank(-value, ties.method = "first"))) %>% # 转回宽格式 pivot_wider(names_from = color_rank, values_from = value) %>% # 移除辅助的row_id列,合并回原数据 select(-row_id) %>% bind_cols(df, .)
验证结果
运行完上面任意一种方法后,打印result_df就能得到你想要的格式:
print(result_df) # Black White Red Blue Color1 Color2 Color3 Color4 # 1 0.8 0.1 0.070 0.030 0.8 0.10 0.07 0.03 # 2 0.3 0.6 0.000 0.100 0.6 0.30 0.10 0.00 # 3 0.1 0.6 0.250 0.050 0.6 0.25 0.10 0.05
内容的提问来源于stack exchange,提问作者Sunny League
相关产品推荐
相关产品推荐

