Chcę zamienić dwie kolumny w data.frame. Wiem, że mógłbym zrobić coś takiego: (?)Zmiana położenia kolumn w ramce danych bez całkowitej zmiany przypisania
dd <- dd[c(1:4, 6:5, 7:10)]
Ale uważam, że to nieeleganckie, potencjalnie powolny i nie programem w obsłudze (trzeba wiedzieć length(dd)
, a nawet kilka przypadków, gdy zamienione kolumny są zbliżone lub nie do tej wartości ...) Czy istnieje prosty sposób, aby to zrobić bez ponownego przypisywania całej ramki danych?
dd[2:3] <- dd[3:2]
okazuje się być bardzo „stratny”, ponieważ [ <-
dotyczy jedynie wartości, a nie jej atrybuty. Tak na przykład:
(dd <- data.frame(A = 1:4, Does = 'really', SO = 'rock'))
dd[3:2]
dd[2:3] <- dd[2:1]
print(dd)
Nazwy kolumn nie są oczywiście odwrócone ...
jakiś pomysł? Mogę również dodać małą niestandardową funkcję do mojej bardzo długiej listy, ale grrr ... powinien być sposobem. ;-)
Pakiet 'data.table' pozwala na zmianę kolejności kolumn bez ponownego przypisywania, ale składnia prawdopodobnie nie jest dużo czystsza niż to, co robisz - http: // s tackoverflow.com/questions/12232041/how-to-reorder-data-table-columns- without -copying – thelatemail
Należy jednak zauważyć, że 'setcolorder' zmienia kolejność kolorów przez odniesienie. Nie są wykonywane żadne kopie. Jest to * szybkie *. – Arun
Przejmowanie kolumn w ramce danych 10 x 1e6 trwa około 7 ms. Więc jeśli nie robisz tego przez cały czas, to raczej nie będzie to wąskie gardło w twoim kodzie, i powinieneś martwić się ekspresywnością, a nie szybkością. – hadley