图形绘图中的抖动概念旨在确保点不重叠。我想在矢量中做类似的事情
想象一下,我有一个这样的矢量:
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?
中实现这一目标如果解决方案允许我调整“附加值”的大小,那就是奖金!
答案 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()&..."