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

如何高效将多列中'yes'值替换为对应列名?(R语言)

高效替换DataFrame中指定值为列名的方案

方法1:Tidyverse风格(dplyr)

适合注重代码可读性且依赖tidyverse的场景,利用向量化操作提升效率:

library(dplyr)

df_new <- df %>%
  mutate(across(-ziekten, ~ifelse(.x == "yes", cur_column(), NA)))
  • across(-ziekten):选中除第一列ziekten外的所有目标列
  • cur_column():自动获取当前处理的列名,无需手动指定,避免重复代码
  • 向量化的ifelse比逐列编写case_when更高效,尤其适合多列场景

方法2:Base R原生实现(无额外依赖)

如果不想加载第三方包,这种向量化方法速度更快,适合超大规模数据集:

# 生成新数据框的写法
df_new <- df
df_new[-1] <- Map(function(col_val, col_name) {
  ifelse(col_val == "yes", col_name, NA)
}, df[-1], names(df[-1]))

或者更简洁的索引式操作:

cols_idx <- 2:ncol(df)
df[cols_idx] <- lapply(cols_idx, function(i) {
  ifelse(df[[i]] == "yes", colnames(df)[i], NA)
})

结果验证

两种方法都能生成你期望的df_new结构,且避免了逐列手动编写判断逻辑,在数据量较大时的执行效率远高于逐个使用ifelse或case_when。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 23:02:13