如何“抖动”数字向量?

时间:2016-03-14 19:49:23

标签: r vector

图形绘图中的抖动概念旨在确保点不重叠。我想在矢量中做类似的事情

想象一下,我有一个这样的矢量:

v <- c(0.5, 0.5, 0.55, 0.60, 0.71, 0.71, 0.8)

正如你所看到的,它是一个通过增加数字排序的向量,但需要注意的是,有些数字完全相同。如何通过添加一个非常小的值来“抖动”它们,以便可以按递增顺序对它们进行严格排序?我想实现这样的目标:

0.5, 0.50001, 0.55, 0.60, 0.71, 0.71001, 0.8

我如何在R?

中实现这一目标

如果解决方案允许我调整“附加值”的大小,那就是奖金!

2 个答案:

答案 0 :(得分:2)

函数rle可以获取向量中重复元素的运行长度。然后,您可以使用此信息创建重复的sequence,将其乘以verySmallNumber并将其添加到v

# New vector to illustrate a triplet
v <- c(0.5, 0.5, 0.55, 0.60, 0.71, 0.71, 0.71, 0.8)

# Define the amount you wish to add
verySmallNumber <- 0.00001

# Get the rle
rv <- rle(v)

# Create the sequence, multiply and subtract the verySmallNumber, then add
sequence(rv$lengths) * verySmallNumber - verySmallNumber + v
# [1] 0.50000 0.50001 0.55000 0.60000 0.71000 0.71001 0.71002 0.80000

当然,最终,非常长的重复序列可能会导致值等于下一个实际值。添加一个检查以查看最长的重复值可能会解决这个问题。

答案 1 :(得分:2)

抖动然后排序:

onclick="...&IncludeAcknowledged=@ViewBag.IncludeAcknoweldged.ToString()&..."