我有一个包含1到5个重复值的向量,后面是另一个这样的集合,通常但不总是增加1.例如,
c(1,1,1,1,1, 2,2,2,2, 3,3, 4,4,4,4,4)
Run Code Online (Sandbox Code Playgroud)
我想对此进行操作,只有在重复给出时才为每个值添加0.2的增量
c(1,1.2,1.4,1.6,1.8, 2,2.2,2.4,2.6, 3,3.2, 4,4.2,4.4,4.6,4.8)
Run Code Online (Sandbox Code Playgroud)
我可以通过使用for循环很容易地做到这一点,但我的初始向量长度超过100万条,这需要相当长的时间.我一直试图想出一个没有运气的基于列表的方法.任何建议,将不胜感激.
这是一种使用rle
和序列来创建序列的方法,0,0.2,0.4,....
并将其添加到原始序列中.
x <- c(1,1,1,1,1, 2,2,2,2, 3,3, 4,4,4,4,4)
x + (sequence(rle(x)$lengths)-1)*0.2
Run Code Online (Sandbox Code Playgroud)
这是一种可能性(假设每个数字不会超过一组且每个数字最多有 5 次重复):
myvec <- c(1,1,1,1,1, 2,2,2,2, 3,3, 4,4,4,4,4)
myvec + seq(0, .8, .2)[ave(myvec, myvec, FUN = seq_along)]
# [1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 3.0 3.2 4.0 4.2 4.4 4.6 4.8
Run Code Online (Sandbox Code Playgroud)
要在处理向量中的重复数字时获得更好的选择,请参阅@mnel 和@thelatemail 的答案......
归档时间: |
|
查看次数: |
114 次 |
最近记录: |