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

在R中为选定列生成每行最大值对应列名的新列

问题解决方法

错误原因

你在子集数据时混合使用了列位置索引(7:29)和列名字符串,R会自动把数值型索引转换成字符串(比如把7变成"7"),相当于你在查找名为"7"、"8"的列,而非第7到29列,这才导致了"列不存在"的报错。

正确实现步骤

1. 先统一生成目标列名列表

先把第7到29列的列名提取出来,再和指定的三个列名合并,得到纯字符型的目标列名向量:

target_cols <- c(colnames(cdmx)[7:29], "coal_pri_pvem", "coal_prd_pt_nva_alianza", "coal_prd_pt")

2. 用dplyr方式生成winner列

使用across(all_of(target_cols))来正确引用目标列,再通过max.col找到每行最大值对应的列索引,最后从target_cols中取出对应列名:

library(dplyr)
cdmx <- cdmx %>%
  mutate(winner = target_cols[max.col(across(all_of(target_cols)), ties.method = "first")])

3. 用Base R方式生成winner列

如果习惯用Base R,同样基于target_cols子集数据,再用apply逐行找最大值列:

cdmx$winner <- target_cols[apply(cdmx[target_cols], 1, function(x) which.max(x, na.rm = TRUE))]

额外验证技巧

可以先检查目标列是否都存在于数据框中,避免列名拼写错误:

# 输出0代表所有列都存在,大于0则说明有列名写错
sum(!target_cols %in% colnames(cdmx))

内容的提问来源于stack exchange,提问作者mr.questions

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:03:14