Considerare il seguente vettore pre-ordinato x
.Inversione dell'ordine delle sezioni duplicate in un vettore
x <- c(1, 2, 2, 2, 3, 5, 7, 7, 7, 8)
order()
ci mostra l'ordine del vettore.
(o <- order(x))
# [1] 1 2 3 4 5 6 7 8 9 10
Ora supponiamo che io voglio invertire l'ordine dei soli duplicati/valori ripetuti di x
, nel senso che voglio per invertire solo i 2 3 4
e 7 8 9
sezioni di o
perché quelli sono i valori ripetuti in x
. Poi, il risultato desiderato sarebbe
[1] 1 4 3 2 5 6 9 8 7 10
Qual è il modo migliore per farlo? In questo momento ho il seguente
w <- which(duplicated(x) | duplicated(x, fromLast = TRUE))
o[w] <- rev(o[w])
Ma questo non dà la risposta corretta qui.
o
# [1] 1 9 8 7 5 6 4 3 2 10
PS: lo sto utilizzando per invertire l'ordine di colonne di nomi di colonne duplicate.
è il vettore 'x' presume essere sempre ordinato di cominciare con o possa avere una soluzione di generalizzare per non ordinate' x's? Ad esempio, qual è il risultato desiderato per 'x <- c (1,3,5,2,7,2,7,2,7,8)'? – aashanand
round di golf chiunque? 'rev (order (-x))' – rawr