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

R语言循环实现按列提取高值对应行名并排序的问题求助

解决方案:用循环实现按列提取降序行名

首先,你之前的代码报错核心原因有两个:

  • arrange(desc(i))未指定操作的数据框,且i是列名字符串,直接传入desc()只会对字符串排序,而非列中的数值
  • 变量名不统一(代码里用了Sample_Ordering_Table和data,但你的示例数据是mydata)

下面分两种输出形式,用基础R循环实现你的需求:

一、生成列表形式的结果

初始化空列表,遍历每一列时提取该列降序对应的行名,再存入列表:

# 初始化空列表
sorted_row_list <- list()

# 遍历mydata的每一列
for (col_name in colnames(mydata)) {
  # 对当前列数值降序排序,获取行名索引
  sorted_index <- order(-mydata[[col_name]])
  # 提取排序后的行名,取前4个(需全部结果可去掉head)
  sorted_rows <- head(rownames(mydata)[sorted_index], 4)
  # 用列名作为列表元素名,存入结果
  sorted_row_list[[col_name]] <- sorted_rows
}

# 查看结果
sorted_row_list

运行后会得到和示例一致的列表,每个元素对应一列的降序行名。

二、生成表格形式的结果

如果需要将结果整理成数据框,只需在循环中把每列结果添加为新列:

# 初始化空数据框
sorted_row_df <- data.frame()

for (col_name in colnames(mydata)) {
  sorted_index <- order(-mydata[[col_name]])
  sorted_rows <- head(rownames(mydata)[sorted_index], 4)
  # 将当前列结果转为数据框的一列
  sorted_row_df[[col_name]] <- sorted_rows
}

# 查看结果
sorted_row_df

用tidyverse风格改写循环(可选)

如果你习惯dplyr语法,可调整循环写法,注意用.data[[col_name]]引用字符串格式的列名:

library(dplyr)
library(tibble)

sorted_row_list <- list()

for (col_name in colnames(mydata)) {
  sorted_rows <- mydata %>%
    rownames_to_column("row_name") %>%
    arrange(desc(.data[[col_name]])) %>%
    slice_head(n = 4) %>%
    pull(row_name)
  
  sorted_row_list[[col_name]] <- sorted_rows
}

内容的提问来源于stack exchange,提问作者Riley Risteen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 22:48:19