Hãy xem xét các vector được sắp xếp trước sau x
.Đảo ngược thứ tự của các phần được sao chép trong một vector
x <- c(1, 2, 2, 2, 3, 5, 7, 7, 7, 8)
order()
cho chúng ta biết thứ tự của vectơ.
(o <- order(x))
# [1] 1 2 3 4 5 6 7 8 9 10
Bây giờ giả sử tôi muốn đảo ngược thứ tự của chỉ nhân đôi/giá trị lặp đi lặp lại của x
, có nghĩa là tôi muốn đảo ngược chỉ 2 3 4
và 7 8 9
phần của o
vì đó là những giá trị lặp đi lặp lại trong x
. Sau đó, kết quả mong muốn sẽ là
[1] 1 4 3 2 5 6 9 8 7 10
cách tốt nhất để làm điều đó là gì? Ngay bây giờ, tôi đã có những điều sau đây
w <- which(duplicated(x) | duplicated(x, fromLast = TRUE))
o[w] <- rev(o[w])
Nhưng điều đó không đưa ra câu trả lời đúng ở đây.
o
# [1] 1 9 8 7 5 6 4 3 2 10
PS - Tôi đang sử dụng điều này để đảo ngược thứ tự cột của tên cột trùng lặp.
là vector 'x' giả định là luôn luôn ra lệnh để bắt đầu với hoặc một giải pháp sẽ phải khái quát cho có thứ tự 'x's? Ví dụ, kết quả mong muốn của bạn cho 'x <- c (1,3,5,2,7,2,7,2,7,8)' là gì? – aashanand
vòng golf bất cứ ai? 'rev (order (-x))' – rawr