Jak zmienić to wejście (z sekwencją: czas, wejście, wyjście, pliki):
Time In Out Files
1 2 3 4
2 3 4 5
Do tego wyjścia (z sekwencją: czas, wyjście, wejście, pliki)?
Time Out In Files
1 3 2 4
2 4 3 5
Oto fikcyjne dane R:
table <- data.frame(Time=c(1,2), In=c(2,3), Out=c(3,4), Files=c(4,5))
table
## Time In Out Files
##1 1 2 3 4
##2 2 3 4 5
help(Extract)
znany również jako?'['
Odpowiedzi:
Twoja ramka danych ma cztery kolumny
df[,c(1,2,3,4)]
. Zauważ, że pierwszy przecinek oznacza zachowanie wszystkich wierszy, a 1,2,3,4 odnosi się do kolumn.Aby zmienić kolejność jak w powyższym pytaniu, zrób to
df2[,c(1,3,2,4)]
Jeśli chcesz wydrukować ten plik jako plik csv, zrób
write.csv(df2, file="somedf.csv")
źródło
df[,c(1,3,2,4:ncol(df))]
gdy nie wiesz, ile jest kolumn.źródło
data <- data[c(1,3,"Var1", 2)]
?c(1,3,"Var1", 2)
zostanie odczytany jako,c("1","3","Var1", "2")
ponieważ wektory mogą zawierać dane tylko jednego typu, więc typy są promowane do najbardziej ogólnego typu. Ponieważ nie ma kolumny z charakteru nazwy „1”, „3”, itd. Dostaniesz „niezdefiniowanych kolumny”.list(1,3,"Var1", 2)
zachowuje wartości bez promocji typu, ale nie można użyćlist
w powyższym kontekście.mtcars[c(1,3,2)]
podzestaw działa? Liczyłam błąd odnoszący się do niewłaściwych wymiarów lub podobnego ... nie powinno byćmtcars[,c(1,3,2)]
?Możesz także użyć funkcji podzestawu:
Lepiej użyj operatora [] jak w innych odpowiedziach, ale warto wiedzieć, że możesz wykonać operację podzbioru i zmiany kolejności kolumn w jednym poleceniu.
Aktualizacja:
Możesz także użyć funkcji wyboru z pakietu dplyr:
Nie jestem pewien co do wydajności, ale dzięki składni dplyr to rozwiązanie powinno być bardziej elastyczne, szczególnie jeśli masz dużo kolumn. Na przykład następujące polecenie zmieni kolejność kolumn zestawu danych mtcars w odwrotnej kolejności:
Następujące elementy uporządkują tylko niektóre kolumny i odrzucą inne:
Przeczytaj więcej o wybranej składni dplyr .
źródło
subset()
, patrz to pytanie .everything()
szczególnie niesamowite;mtcars %>% select(wt, gear, everything())
Jak wspomniano w tym komentarzu , standardowe sugestie dotyczące ponownego zamawiania kolumn w a
data.frame
są na ogół uciążliwe i podatne na błędy, szczególnie jeśli masz dużo kolumn.Ta funkcja pozwala ponownie rozmieścić kolumny według pozycji: podaj nazwę zmiennej i żądaną pozycję i nie martw się o inne kolumny.
Teraz prośba PO staje się tak prosta:
Aby dodatkowo zamienić
Time
iFiles
kolumny, możesz to zrobić:źródło
dplyr
Roztworu (częśćtidyverse
zestawu pakietu) jest użycieselect
:źródło
select(iris, Species, everything())
. Należy również pamiętać, że cytaty nie są potrzebne.everything()
podasz je w komentarzudplyr
„sgroup
będzie także zmienić kolejność zmiennych, więc należy zwrócić uwagę, że w przypadku korzystania z sieci.Może to przypadek, że żądana kolejność kolumn ma nazwy kolumn w malejącej kolejności alfabetycznej. Ponieważ właśnie tak możesz zrobić:
Tego używam, gdy mam duże pliki z wieloma kolumnami.
źródło
!! WARNING !!
data.table
zamienia sięTARGET
w wektor int:TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
aby to naprawić:TARGET <- as.data.frame(TARGET)
TARGET <- TARGET[ , order(colnames(TARGET), decreasing=TRUE)]
Możesz użyć pakietu data.table :
Jak zmienić kolejność kolumn data.table (bez kopiowania)
źródło
Te trzy najlepiej ocenione odpowiedzi mają słabość.
Jeśli twoja ramka danych wygląda tak
to jest kiepskie rozwiązanie do użycia
Wykonuje zadanie, ale właśnie wprowadziłeś zależność od kolejności kolumn w danych wejściowych.
Tego stylu łamliwego programowania należy unikać.
Wyraźne nazewnictwo kolumn jest lepszym rozwiązaniem
Ponadto, jeśli zamierzasz ponownie użyć kodu w bardziej ogólnym ustawieniu, możesz po prostu
co jest również całkiem miłe, ponieważ w pełni izoluje literały. Natomiast jeśli używasz dplyr's
select
wtedy powinieneś ustawić tych, którzy będą czytać Twój kod później, łącznie z tobą, dla trochę oszustwa. Nazwy kolumn są używane jako literały, ale nie pojawiają się w kodzie jako takim.
źródło
dplyr
wersja1.0.0
zawierarelocate()
funkcję łatwego zmieniania kolejności kolumn:lub
źródło
źródło
setcolorder
.Jedyny, który widziałem dobrze działa, jest stąd .
Użyj w ten sposób:
Działa jak marzenie.
źródło