如何利用变量名修改大型dataframe中列的取值?
解决方法:将数据框中1/0替换为
yes_列名/no_列名 基础R实现
无需额外依赖包,通过lapply遍历列并结合列名完成替换:
# 示例数据框 df <- data.frame(x = c(1,0,0,1), y = c(0,0,1,1)) # 执行替换逻辑 df[] <- lapply(names(df), function(col_name) { ifelse(df[[col_name]] == 1, paste0("yes_", col_name), paste0("no_", col_name)) })
用df[]赋值可以确保结果保持数据框结构,不会被转换为列表。
dplyr(tidyverse)实现
如果习惯使用tidyverse工具链,可借助across结合cur_column()获取当前列名:
library(dplyr) df <- df %>% mutate(across(everything(), ~ifelse(.x == 1, paste0("yes_", cur_column()), paste0("no_", cur_column()))))
across(everything())会对所有列应用替换逻辑,适配大型数据框的批量处理需求。
执行后得到的结果如下:
> df x y 1 yes_x no_y 2 no_x no_y 3 no_x yes_y 4 yes_x yes_y
内容的提问来源于stack exchange,提问作者An116
相关产品推荐
相关产品推荐

