R语言如何定位数据框中首个满足条件的行并计算替换对应值
R 实现b列首个非零值动态替换
需求说明
给定测试数据框:
t <- data.frame( a = c(0,0,2,4,5), b = c(0,0,4,6,5) )
初始数据内容:
a b 1 0 0 2 0 0 3 2 4 4 4 6 5 5 5
需要动态定位b列第一个非零值所在行i,将该行b列值替换为后续两行b列值的和(即t$b[i] = t$b[i+1] + t$b[i+2]),b列其余值保持不变,最终预期输出:
a b 1 0 0 2 0 0 3 2 11 4 4 6 5 5 5
禁止硬编码固定行号,需适配动态变化的数据集。
实现代码
通过which()函数匹配b列非零值的位置,取第一个结果即为目标行索引,赋值替换即可,可额外加索引合法性判断避免运行报错:
# 定位b列第一个非零值的行号 i <- which(t$b != 0)[1] # 索引合法性校验:确保存在非零值,且目标行后至少有2行数据(可根据实际数据情况取舍) if (!is.na(i) && i + 2 <= nrow(t)) { t$b[i] <- t$b[i + 1] + t$b[i + 2] }
运行代码后查看数据框,即可得到符合要求的结果:
> print(t) a b 1 0 0 2 0 0 3 2 11 4 4 6 5 5 5
内容的提问来源于stack exchange,提问作者João Machado
相关产品推荐
相关产品推荐

