R语言如何移除向量列表末尾连续双0中的最后一个0
问题说明
待处理的R语言列表数据集结构如下:
dat <- list( `A` = c(0, 25, 500, 1000, 0, 0), `B` = c(0, 25, 500, 1000, 1500, 0) )
处理要求:对列表内的每个向量做校验,如果向量末尾连续存在两个0,就移除最后一位的0,其余情况保留向量原样。
预期处理结果:
out_dat <- list( `A` = c(0, 25, 500, 1000, 0), `B` = c(0, 25, 500, 1000, 1500, 0) )
解决方案
用lapply遍历列表内所有向量,对每个向量单独做末尾值判断即可,代码可直接运行:
out_dat <- lapply(dat, function(vec) { n <- length(vec) # 长度不足2的向量不可能出现末尾两个0,直接返回原向量 if (n < 2) return(vec) # 校验最后两位是否均为0,是则去掉最后一位 if (vec[n] == 0 && vec[n-1] == 0) { vec[-n] } else { vec } })
效果验证
运行上述代码后完全匹配预期结果:
- 向量
A末尾两位均为0,移除最后一位0,长度从6变为5 - 向量
B末尾仅1个0,不满足触发条件,完整保留原长度和所有值 - 向量开头、中间位置的0不会被误删,不会破坏原有数据结构
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

