R中的部分向量加法

use*_*938 5 r

我有一个包含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万条,这需要相当长的时间.我一直试图想出一个没有运气的基于列表的方法.任何建议,将不胜感激.

mne*_*nel 7

这是一种使用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)


A5C*_*2T1 3

这是一种可能性(假设每个数字不会超过一组且每个数字最多有 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 的答案......

  • 绝对地!没有咖啡编码就像没有笔写作 (2认同)