如何用rep()函数根据向量元素差值重复对应元素(免for循环)
解决方案
直接用diff()函数计算相邻元素的差值,再给最后一个元素补一个重复次数1,就能配合rep()完成需求,完全不用循环:
x <- c(1, 4, 7, 9) # 计算每个元素的重复次数:相邻元素差 + 最后一个元素的1次 times <- c(diff(x), 1) # 生成结果 result <- rep(x, times = times) result # 输出:[1] 1 1 1 4 4 4 7 7 9
原理说明
diff(x)会返回向量中相邻元素的差值,也就是4-1=3、7-4=3、9-7=2,得到c(3,3,2)- 因为最后一个元素9不需要基于下一个元素计算次数,直接保留1次,所以把
1追加到差值向量末尾,得到完整的重复次数向量c(3,3,2,1) rep(x, times)会按照times中对应位置的次数,重复x里的每个元素
内容的提问来源于stack exchange,提问作者Puneet Sachdeva
相关产品推荐
相关产品推荐

