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

如何在R中将数据框中值为1的元素替换为对应列名?

替换数据框中1为对应列名的R语言实现

这是个很典型的数据替换需求,我给你两种实用的解法,分别基于base R和tidyverse工具包,都能完美实现你的目标:

方法一:Base R 原生实现

不需要额外安装包,用sapply遍历每一列,结合ifelse完成替换:

# 定义原始数据框
df <- data.frame('a' = c(1,0,0,1,0), 'b' = c(1,0,0,1,0), 'c' = c(1,1,0,1,1))

# 执行替换操作
df_result <- as.data.frame(sapply(names(df), function(col_name) {
  # 对当前列,将1替换为列名,0保持不变
  ifelse(df[[col_name]] == 1, col_name, df[[col_name]])
}))

# 查看结果
print(df_result)

运行后输出的结果就是你期望的:

a b c
1 a b c
2 0 0 c
3 0 0 0
4 a b c
5 0 0 c

方法二:Tidyverse(dplyr)实现

如果你平时习惯用tidyverse生态的工具,用dplyr的across函数会更简洁直观:

# 先加载dplyr包(如果没安装先运行 install.packages("dplyr"))
library(dplyr)

# 定义原始数据框
df <- data.frame('a' = c(1,0,0,1,0), 'b' = c(1,0,0,1,0), 'c' = c(1,1,0,1,1))

# 执行替换操作
df_result <- df %>%
  mutate(across(everything(), ~ifelse(.x == 1, cur_column(), .x)))

# 查看结果
print(df_result)

这里across(everything())表示选中所有列,cur_column()会自动获取当前处理的列名,逻辑清晰易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:13:42