如何在R语言中批量重编码以i开头列的0与1值
解决方案
下面提供两种常用的R语言实现方式,均可批量处理所有以i开头的列,同时保留NA值:
方法一:Base R 原生实现
先筛选出所有以i开头的列名,再对这些列执行值反转操作:
# 定义原始数据集 df <- data.frame(id = c(11,22,33), i1 = c(0,1,NA), i2 = c(1,1,0), i3 = c(0,NA,1)) # 筛选以i开头的列 cols <- grep("^i", names(df), value = TRUE) # 反转值:0→1,1→0,NA保留 df[cols] <- lapply(df[cols], function(x) 1 - x) # 查看结果 df
执行后输出:
id i1 i2 i3 1 11 1 0 1 2 22 0 0 NA 3 33 NA 1 0
方法二:dplyr 管道式实现(tidyverse风格)
适合习惯使用tidyverse生态的用户,用across()批量匹配目标列:
library(dplyr) # 定义原始数据集 df <- data.frame(id = c(11,22,33), i1 = c(0,1,NA), i2 = c(1,1,0), i3 = c(0,NA,1)) # 批量处理以i开头的列 df1 <- df %>% mutate(across(starts_with("i"), ~ 1 - .x)) # 查看结果 df1
执行后输出与方法一一致。
原理说明
核心逻辑是利用1 - x的计算特性:
- 当x=0时,1-0=1(实现0→1)
- 当x=1时,1-1=0(实现1→0)
- 当x=NA时,1-NA结果仍为NA(保留缺失值)
内容的提问来源于stack exchange,提问作者amisos55
相关产品推荐
相关产品推荐

