如何在首字母为P的行与X/Y列中,找出最大值对应的行名?
解决方案:筛选子集并找到最大值对应的行名
先构造示例数据(方便测试验证)
set.seed(123) df <- data.frame( X = rnorm(10), Y = rnorm(10), Z = rnorm(10), row.names = c(paste0("P", 1:5), paste0("Q", 1:5)) )
问题分析
你之前的代码错误核心:
starts_with是dplyr中专门用于选择列的工具,不能直接用来判断行名前缀,用它处理行名向量完全偏离逻辑- 第二个
apply写法逻辑混乱,rownames()的参数必须是数据框,传入单个字符串必然返回NULL
方法1:Base R 原生实现
直接通过行名筛选、列索引提取目标子集,再定位最大值对应的行名:
# 1. 提取目标子集:行名以P开头,仅保留X/Y列 target_subset <- df[grepl("^P", rownames(df)), c("X", "Y")] # 2. 定位最大值对应的行名 max_row_name <- rownames(target_subset)[which.max(target_subset)]
grepl("^P", rownames(df)):用正则匹配行名以P开头的行,返回逻辑筛选向量which.max(target_subset):返回子集内最大值的线性索引,再通过rownames()映射到对应行名
方法2:Tidyverse 简洁实现
如果习惯dplyr语法,用startsWith做更高效的前缀匹配:
library(dplyr) max_row_name <- df %>% # 筛选行名以P开头的行 filter(startsWith(rownames(.), "P")) %>% # 仅保留X/Y列 select(X, Y) %>% # 定位最大值对应的行名(大括号规避管道自动传参问题) {rownames(.)[which.max(.)]}
内容的提问来源于stack exchange,提问作者jumpsuitgallion
相关产品推荐
相关产品推荐

