如何在不触及 R 中的 -1 值的情况下按非降序对向量进行排序?

How to sort a vector in non-descending order without touching -1 values in R?

问题:

"有些人在公园里站成一排,他们中间有树,不能移动。你的任务是在不移动树的情况下,按身高非降序重新排列人。人可以要很高!"

例子

为了

 a = [-1, 150, 190, 170, -1, -1, 160, 180],

输出应该是

 solution(a) = [-1, 150, 160, 170, -1, -1,   180, 190].

我们基本上需要扫描这个列表,看看哪里有下降(除非它是 -1),然后找到一种方法来重新排序非 -1 元素,以便列表是非升序的。我基本上不知道从哪里开始这个问题。有人可以在 base R 中试一试并告诉我你的想法吗?

a = c(-1, 150, 190, 170, -1, -1, 160, 180)
a[a>0] = sort(a[a>0])
a

[1]  -1 150 160 170  -1  -1 180 190

解释:

  • a>0 是获取 non-trees 值的布尔掩码:

假真真真假假真真

如果你将它应用到 a 你会得到:

#a[a>0]
150 160 170 180 190

因此,您可以使用 sort(a[a>0]) 对值进行排序,并使用与布尔掩码相同的方法设置回原始向量。

a[a>0] = sort(a[a>0])