2015-02-23 32 views
6

Mam ramkę danych z unikalnymi nazwami rzędów i unikalnymi nazwami kolumn. Chcę przekonwertować wiersze na kolumny i kolumny na wiersze.Przekształcanie wierszy w kolumny i kolumny w wiersze przy użyciu R

Na przykład ten kod:

starting_df <- data.frame(row.names= c(LETTERS[1:4]), 
          a = c(1:4), 
          b = seq(0.02,0.08,by=0.02), 
          c = c("Aaaa","Bbbb","Cccc","Dddd") 
       ) 

wyniki w następujących przypadkach:

> starting_df 
    a b c 
A 1 0.02 Aaaa 
B 2 0.04 Bbbb 
C 3 0.06 Cccc 
D 4 0.08 Dddd 

chcę przekonwertować go do innej ramki danych zawierającą dokładnie te same dane, z wyjątkiem tego, co dawniej rzędy były teraz kolumny i odwrotnie:

> final_df 
    A B C D 
a 1 2 3 4 
b 0.02 0.04 0.06 0.08 
c Aaaa Bbbb Cccc Dddd 
+11

Czy próbowałeś po prostu odwrócić głowę? –

+1

Mogłem to zrobić w innym języku, ale byłem pewien, że był szybki sposób, aby to zrobić w ** R **. Czułam się bardzo głupio, gdy zdałam sobie sprawę z tego, jaka jest odpowiedź, ale pomyślałam, że przyda się to każdemu, kto spróbuje to rozgryźć. Przy okazji przeszukałem Stackoverflow za pomocą znacznika [r] dla wielu odmian następujących: * Konwertuj wiersze na kolumny i odwrotnie; Przekształć kolumny w wiersze i wiersze w kolumny; Obróć ramkę danych; Zamień wiersze i kolumny; * –

Odpowiedz

13

Po prostu użyj podstawy transpozycji funkcję t, owinięty as.data.frame:

final_df <- as.data.frame(t(starting_df)) 
final_df 
    A B C D 
a 1 2 3 4 
b 0.02 0.04 0.06 0.08 
c Aaaa Bbbb Cccc Dddd 

Above zaktualizowany. Jak zauważył docendo discimus, t zwraca macierz. Jak Mark zasugerował owijanie go przez as.data.frame otrzymuje ramkę danych zamiast matrycy. Dzięki!

+1

Przekształcając plik data.frame, musisz "potajemnie" przekonwertować go do macierzy klas: 'klasa (final_df) # [1]" macierz "' –

+1

zawiń a as.data.frame() dookoła niego aby upewnić się, że jest to data.frame – Mark

+2

@ Mark, konwersja do macierzy _may_ ma pewne efekty uboczne, jeśli masz kolumny innej klasy, ponieważ macierze w R mogą mieć tylko kolumny tej samej klasy. –