mam data.table
dumdt
:Zmiana kolejności wierszy w data.table w określonej kolejności
set.seed(123)
dumdt <- data.table(v1=sample(1:10, 5), v2=1:5)
którego wiersze chciałbym uporządkować w tym konkretnym indeksów kolejności (tak pierwszy trzeci obserwacji, wówczas piąty potem drugi, itd.):
to_ord <- c(3, 5, 2, 1, 4)
Więc chciałbym dumdt
być wynikiem dumdt[to_ord]
ale ja również chciałbym to zrobić poprzez odniesienie i uniknąć robi dumdt <- dumdt[to_ord]
.
wiem, że mogę zmienić kolejność wierszy przez odniesienie z setorder
(lub setorderv
), ale tylko według jednej lub kilku zmiennych, w kolejności rosnącej lub malejącej, a nie w niestandardowej kolejności.
Jeśli jednak chciałbym zmienić kolejność kolumn, a nie wierszy, w niestandardowej kolejności, mógłbym użyć setcolorder
.
Oto moje pytanie: czy istnieje funkcja, która działałaby tak, jak setcolorder
, ale z wierszami (lub sposobem użycia tego samego przy użyciu setorder
)?
Moja pożądanym wyjściem byłoby coś
setroworder(x=dumdt, neworder=to_ord)
dumdt
# v1 v2
# 1: 4 3
# 2: 6 5
# 3: 8 2
# 4: 3 1
# 5: 7 4
Czy nie jest 'setorder (cbind (dumdt, to_ord), to_ord)' (następnie ustawić to_ord na NULL) wystarczająco szybko? –
@EricLecoutre Dziękuję za komentarz, nie jestem pewien, czy użycie 'cbind' będzie skuteczne, ale w każdym razie, to zmieniłoby nieprzypisane wyjście' cbind', a nie obiekt początkowy, tak by naprawdę nie pomogło. (a właściwie jestem przekonany, że produkcja nie byłaby oczekiwana ...) – Cath
Yeks ... Rzeczywiście. Zawsze pewne trudności z odniesieniami ... –