R语言对指定列区间应用ifelse时如何保留其余列不变
解决方案
你之前的写法是仅提取2:3列传入ifelse做计算,返回的结果自然只包含这部分列。要保留未修改列的原值,只需先复制原数据集,再单独对目标列区间做赋值即可:
# 复制原数据集,保留所有列的初始值 df2 <- df # 仅对指定列区间做值替换 df2[, 2:3] <- ifelse(df2[, 2:3] == 1, 2, 0)
运行后输出结果如下:
x y z 1 123 2 0 2 121 0 0 3 120 0 0 4 124 0 0 5 125 2 2
如果你习惯使用tidyverse语法,也可以用dplyr::across实现同样效果,适合处理大量列的场景:
library(dplyr) df2 <- df %>% # 按索引区间指定要修改的列,传入替换逻辑 mutate(across(2:3, ~ifelse(.x == 1, 2, 0)))
内容的提问来源于stack exchange,提问作者Nao
相关产品推荐
相关产品推荐

