数据
x <- c(-0.5, -0.6, 0.7, 1, 1.5, 3, -5)
Run Code Online (Sandbox Code Playgroud)
使用rbind()创建的替代指标向量.
ind <- seq_along(x)
sort(x, decreasing = T)[c(rbind(ind, rev(ind)))][ind]
# [1] 3.0 -5.0 1.5 -0.6 1.0 -0.5 0.7
Run Code Online (Sandbox Code Playgroud)
上面的方法应该是内存消耗,因为它会创建两倍长的向量.要征服它,您可以将中点设置为结束索引.在这种情况下,它将是ceiling(7 / 2) = 4.
n <- length(x)
ind <- 1:ceiling(n / 2) # [1] 1 2 3 4
sort(x, decreasing = T)[c(rbind(ind, (n:1)[ind]))][1:n]
# [1] 3.0 -5.0 1.5 -0.6 1.0 -0.5 0.7
Run Code Online (Sandbox Code Playgroud)
我们可以split在列表基础上sign与sort他们.然后,我们通过从正面和负面列表中选择交替元素来创建一个新列表,确保能够rev清除列表的正面部分.
new_list <- sapply(split(x, sign(x)), sort)
c(rbind(rev(new_list[['1']]), new_list[['-1']]))[1:length(x)]
#[1] 3.0 -5.0 1.5 -0.6 1.0 -0.5 0.7
Run Code Online (Sandbox Code Playgroud)
数据
x <- c(-0.5, -.6, 0.7, 1, 1.5, 3, -5 )
Run Code Online (Sandbox Code Playgroud)