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

如何在首字母为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:25:46