我有数字向量,例如c(1, 2, 3, 3, 2, 1, 3)
or c(1, 4, 1, 4, 4, 1)
,我想保留单个元素的位置,但交换/反转值,以便我们c(3, 2, 1, 1, 2, 3, 1)
分别得到c(4, 1, 4, 1, 1, 4)
。
为了实现这一点,我在下面提出了一个相当粗糙和丑陋的代码,其中包含大量的调试和修补......
blah <- c(1, 4, 1, 4, 4, 1, 3)
blah.uniq <- sort(unique(blah))
blah.uniq.len <- length(blah.uniq)
j <- 1
end <- ceiling(blah.uniq.len / 2)
if(end == 1) {end <- 2} # special case like c(1,4,1), should get c(4,1,4)
for(i in blah.uniq.len:end) {
x <- blah == blah.uniq[i]
y <- blah == blah.uniq[j]
blah[x] <- blah.uniq[j]
blah[y] <- blah.uniq[i]
j = j + 1
}
blah
有没有更简单的方法来做到这一点?