在r中创建备用系列

Mat*_*ers 9 sorting r

我有一个名单-0.5,-0.6,0.7,1,1.5,3,-5,我想将它作为排序3,-5,1.5,-0.6,1,-0.5,0.7.换句话说,我想将列表分为正面和负面列表,然后将它们从最大到最小排序,但是交替排序.

我怎样才能做到这一点?

Dar*_*sai 8

数据

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)


Ron*_*hah 5

我们可以split在列表基础上signsort他们.然后,我们通过从正面和负面列表中选择交替元素来创建一个新列表,确保能够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)