R语言如何替换数据框指定列中满足条件的每第n个元素
R语言无循环修改DataFrame解决方案
核心逻辑是通过逻辑向量索引同时匹配两个筛选条件,直接向量化赋值,完全不需要循环实现需求。
步骤1:构造示例数据
df <- data.frame(a =c(2,2,2,2,2,2,2,2,2,2),b = c(1,1,0,1,1,0,0,1,1,1))
步骤2:执行替换操作
两种写法都可以实现需求:
写法1:先取固定间隔行再匹配b列条件
# 先拿到第1行及之后每隔3行的行号 target_rows <- seq(1, nrow(df), by = 3) # 筛选上述行中b列值为1的位置,给对应a列赋值为5 df$a[target_rows[df$b[target_rows] == 1]] <- 5
写法2:用模运算直接构造双条件逻辑索引(更简洁)
行号对3取模等于1的行刚好是1、4、7、10...的间隔序列,直接和b列等于1的条件做逻辑与即可:
df$a[seq(nrow(df)) %% 3 == 1 & df$b == 1] <- 5
验证结果
输出修改后的df即可得到目标结果:
> df a b 1 5 1 2 2 1 3 2 0 4 5 1 5 2 1 6 2 0 7 2 0 8 2 1 9 2 1 10 5 1
内容的提问来源于stack exchange,提问作者Vincent C
相关产品推荐
相关产品推荐

