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

如何用R语言生成含特定列最大值对应变量名的新DataFrame?

R语言提取每行最大值对应的列名并生成新DataFrame

示例输入数据

先模拟你的输入DataFrame,方便验证代码效果:

df <- data.frame(
  wind = c(5, 10, 15),
  ROS = c(0.2, 0.5, 0.8),
  T_0.1 = c(10, 20, 15),
  T_0.2 = c(15, 18, 20),
  T_0.3 = c(12, 25, 18),
  T_180.1 = c(8, 12, 9),
  T_180.2 = c(10, 15, 12),
  T_180.3 = c(9, 18, 10)
)

方法一:Base R实现

无需额外安装包,直接用基础函数完成:

# 筛选出以T_0.和T_180.开头的列名
t0_cols <- grep("^T_0\\.", names(df), value = TRUE)
t180_cols <- grep("^T_180\\.", names(df), value = TRUE)

# 逐行提取最大值对应的列名
df$new_T0 <- apply(df[t0_cols], 1, function(x) names(x)[which.max(x)])
df$new_T180 <- apply(df[t180_cols], 1, function(x) names(x)[which.max(x)])

# 保留目标列生成新DataFrame
new_df <- df[, c("wind", "ROS", "new_T0", "new_T180")]

方法二:Tidyverse实现

如果习惯用dplyr/tidyr的管道语法,代码更直观:

library(dplyr)
library(tidyr)

new_df <- df %>%
  rowwise() %>%
  # 提取T_0.列中最大值对应的列名
  mutate(new_T0 = names(select(., starts_with("T_0.")))[which.max(c_across(starts_with("T_0.")))]) %>%
  # 提取T_180.列中最大值对应的列名
  mutate(new_T180 = names(select(., starts_with("T_180.")))[which.max(c_across(starts_with("T_180.")))]) %>%
  ungroup() %>%
  # 选择最终需要的列
  select(wind, ROS, new_T0, new_T180)

结果验证

运行上述代码后,new_df的输出如下:

> new_df
  wind ROS new_T0 new_T180
1    5 0.2 T_0.2  T_180.2
2   10 0.5 T_0.3  T_180.3
3   15 0.8 T_0.2  T_180.2

注意事项

如果某一行中存在多个相同的最大值,which.max()会返回第一个出现该最大值的列名。如果需要提取所有最大值对应的列名,可以将函数修改为:

# 示例:提取所有最大值对应的列名(以T_0.为例)
df$new_T0_all <- apply(df[t0_cols], 1, function(x) paste(names(x)[x == max(x)], collapse = ","))

内容的提问来源于stack exchange,提问作者Raquel Feltrin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:25:25