如何在R中按行查找指定列范围(3-223列)最大值的列名
解决方案
方法一:使用dplyr包
先提前提取目标列的列名(第3到223列),再结合rowwise()和c_across()实现按行匹配最大值对应的列名,同时保留前两列:
library(dplyr) # 提取第3到223列的列名 target_cols <- names(df)[3:223] # 新增列存储最大值对应的列名 df <- df %>% rowwise() %>% mutate(max_col = target_cols[which.max(c_across(all_of(target_cols)))]) %>% ungroup()
target_cols提前锁定需要计算的列范围,避免后续误取其他列all_of(target_cols)确保dplyr正确识别预定义的列名向量ungroup()取消行分组,恢复数据框的常规操作效率
方法二:使用Base R(无需额外包)
如果不想加载dplyr,用apply()函数可以更高效地处理:
# 定义目标列的位置范围 target_cols_idx <- 3:223 # 按行计算最大值对应的列名,并新增到数据框 df$max_col <- apply(df[, target_cols_idx], 1, function(x) { names(df)[target_cols_idx][which.max(x)] })
apply(df[, target_cols_idx], 1, ...)指定对目标列的每一行执行操作- 匿名函数中通过
which.max(x)找到当前行最大值的位置,再对应到目标列的列名
内容的提问来源于stack exchange,提问作者Lilia
相关产品推荐
相关产品推荐

