如何为R语言vector中每个N/A元素后追加一个N/A?
解决向量中为每个"N/A"追加一个"N/A"的问题
你的代码问题分析
你当前的代码没效果主要有三个原因:
append()函数不会直接修改原向量,它会返回一个新向量,你需要把结果重新赋值给原变量才会生效。- 当你在向量中添加元素后,原有的
position位置会失效——每添加一个元素,后面所有元素的位置都会后移,之前记录的位置就不准了。 - 循环次数写错了:你应该循环
position的长度,而不是原向量的长度。
简洁高效的解决方案(推荐)
用rep()结合条件判断就能一步到位,完全适配任意长度的向量:
example <- c("a", "b", "N/A", "c", "d", "N/A", "e", "f") # 对每个元素判断:如果是"N/A"就重复2次,否则1次 result <- rep(example, times = ifelse(example == "N/A", 2, 1))
执行后result就是你要的结果:c("a", "b", "N/A", "N/A", "c", "d", "N/A", "N/A", "e", "f")
循环实现的正确写法
如果你偏好循环方式,记得从后往前处理位置(避免添加元素导致后续位置偏移),并且每次把append的结果重新赋值:
example <- c("a", "b", "N/A", "c", "d", "N/A", "e", "f") positions <- which(example == "N/A") # 逆序遍历位置,防止前面的位置被后面的添加操作影响 for (pos in rev(positions)) { example <- append(example, "N/A", after = pos) }
内容的提问来源于stack exchange,提问作者Brendan Sullivan
相关产品推荐
相关产品推荐

