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

R语言:在指定列中识别每行最小值所在列并新增列

解决方法

你的问题出在names(mydata)的使用上:apply处理的是你指定的四列子集,which.min返回的是这个子集内部的列索引(1-4),但你用整个dataframe的列名去匹配,自然会拿到错误的列名(比如整个dataframe的前4列,不一定是你指定的那四个)。

直接改代码就行,不用拆分合并数据框:

基础R方法

先把目标列存成一个向量(避免重复写,也方便修改):

target_cols <- c("High", "Good", "Moderate", "Poor")  # 注意和你实际列名完全一致,大小写、拼写都不能错

然后替换原来的代码:

mydata$lowest_col_name <- target_cols[apply(mydata[, target_cols], MARGIN = 1, FUN = which.min)]

这样apply返回的索引会直接匹配target_cols里的列名,不会涉及其他列。

tidyverse方法(dplyr)

如果习惯用tidyverse,代码更直观:

library(dplyr)

target_cols <- c("High", "Good", "Moderate", "Poor")

mydata <- mydata %>%
  rowwise() %>%
  mutate(lowest_col_name = target_cols[which.min(c_across(all_of(target_cols)))]) %>%
  ungroup()

另外注意:你问题里写的目标列是“High”“Good”“Moderate”“Poor”,但代码里写的是"high","good","moderate","poorbad",列名大小写和拼写必须完全一致,否则会选不到正确的列,这也是常见的坑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 23:40:36