Ubah urutan bingkai data

107

Saya perlu mengubah bingkai data yang besar, jadi saya menggunakan:

df.aree <- t(df.aree)
df.aree <- as.data.frame(df.aree)

Inilah yang saya dapatkan:

df.aree[c(1:5),c(1:5)]
                         10428        10760        12148        11865
    name                M231T3       M961T5       M960T6      M231T19
    GS04.A        5.847557e+03 0.000000e+00 3.165891e+04 2.119232e+04
    GS16.A        5.248690e+04 4.047780e+03 3.763850e+04 1.187454e+04
    GS20.A        5.370910e+03 9.518396e+03 3.552036e+04 1.497956e+04
    GS40.A        3.640794e+03 1.084391e+04 4.651735e+04 4.120606e+04    

Masalah saya adalah nama kolom baru (10428, 10760, 12148, 11865) yang perlu saya hilangkan karena saya perlu menggunakan baris pertama sebagai nama kolom.

Saya mencoba dengan col.names()fungsi tetapi saya belum mendapatkan apa yang saya butuhkan.

Apakah anda memiliki saran?

EDIT

Terima kasih atas saran Anda !!! Menggunakannya saya mendapatkan:

df.aree[c(1:5),c(1:5)]
                        M231T3       M961T5       M960T6      M231T19
    GS04.A        5.847557e+03 0.000000e+00 3.165891e+04 2.119232e+04
    GS16.A        5.248690e+04 4.047780e+03 3.763850e+04 1.187454e+04
    GS20.A        5.370910e+03 9.518396e+03 3.552036e+04 1.497956e+04
    GS40.A        3.640794e+03 1.084391e+04 4.651735e+04 4.120606e+04
    GS44.A        1.225938e+04 2.681887e+03 1.154924e+04 4.202394e+04

Sekarang saya perlu mengubah nama baris (GS ..) menjadi kolom faktor ....

Riccardo
sumber
1
Apakah Anda mencoba colnames(df.aree)<-df.aree[1,];df.aree<-df.aree[2:nrow(df.aree),]?
5
Bingkai data secara alami tidak dimaksudkan untuk diubah posisinya. Jika milik Anda adalah, maka mungkin itu harus dalam bentuk matriks.
Richie Cotton
Setuju; tPembuatan kerangka data juga cukup tidak efisien. Jika bisa, gunakan matriks.
mbq
5
Mentransposisi data.frame yang berisi kolom string di dalamnya mengubah SEMUA nilai menjadi string! Tidak baik. Lihat jawaban saya di bawah ini untuk mengatasinya.
Tommy

Jawaban:

109

Sebaiknya Anda tidak mengubah urutan data.frame saat kolom nama ada di dalamnya - semua nilai numerik akan diubah menjadi string!

Inilah solusi yang menjadikan angka sebagai angka:

# first remember the names
n <- df.aree$name

# transpose all but the first column (name)
df.aree <- as.data.frame(t(df.aree[,-1]))
colnames(df.aree) <- n
df.aree$myfactor <- factor(row.names(df.aree))

str(df.aree) # Check the column types
Tommy
sumber
49
df.aree <- as.data.frame(t(df.aree))
colnames(df.aree) <- df.aree[1, ]
df.aree <- df.aree[-1, ]
df.aree$myfactor <- factor(row.names(df.aree))
jujur
sumber
@ Riccardo Jika demikian, terima jawabannya dengan mengklik tanda centang abu-abu di sebelahnya.
mbq
4
satu masalah dengan ini - nama kolom mengambil representasi numerik dari tingkat faktor.
Harry Palmer
48

Anda dapat menggunakan transposefungsi dari data.tableperpustakaan. Solusi sederhana dan cepat yang menjaga numericnilai sebagai numeric.

library(data.table)

# get data
  data("mtcars")

# transpose
  t_mtcars <- transpose(mtcars)

# get row and colnames in order
  colnames(t_mtcars) <- rownames(mtcars)
  rownames(t_mtcars) <- colnames(mtcars)
rafa.pereira
sumber
4
juga, setnames(t_mtcars, rownames(mtcars))akan menjadi data.tablecara - cara pengaturan nama pada data.table (dan jika menggunakan data.tableobjek Anda tidak akan mengatur rownames)
SymbolixAU
Sejauh ini, ini adalah solusi terbaik! +1.
HelloWorld
1

Manfaatkan as.matrix:

# keep the first column 
names <-  df.aree[,1]

# Transpose everything other than the first column
df.aree.T <- as.data.frame(as.matrix(t(df.aree[,-1])))

# Assign first column as the column names of the transposed dataframe
colnames(df.aree.T) <- names
Ghazal
sumber