R语言如何提取数据框每行前N大数值对应的列名
R实现取每行数值前K大对应的列名
你可以通过以下两种方式实现需求,支持自定义取前N个最大值对应的列名:
基础R实现
无需安装额外依赖,直接运行即可:
# 示例数据 DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4)) # 自定义取前K个最大值,可修改为3、10等符合列数的数值 K <- 2 # 核心计算逻辑 result <- t(apply(DF, 1, function(x) colnames(DF)[order(-x)][1:K])) rownames(result) <- 1:nrow(result)
运行后打印result即可得到预期输出:
[,1] [,2] 1 "V3" "V2" 2 "V1" "V3" 3 "V2" "V3"
tidyverse风格实现
如果习惯使用tidyverse生态的语法,可以用以下代码:
library(tidyverse) DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4)) K <- 2 result <- DF |> rownames_to_column("row_id") |> pivot_longer(-row_id) |> group_by(row_id) |> slice_max(order_by = value, n = K, with_ties = FALSE) |> mutate(rank = row_number()) |> pivot_wider(id_cols = row_id, names_from = rank, values_from = name) |> ungroup() |> select(-row_id) |> as.matrix() rownames(result) <- 1:nrow(result)
内容的提问来源于stack exchange,提问作者Jingjun
相关产品推荐
相关产品推荐

