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
相关产品推荐
相关产品推荐

