Bir veri çerçevesini değiştirin


107

Büyük bir veri çerçevesini dönüştürmem gerekiyor ve bu yüzden şunu kullandım:

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

Bu elde ettiğim şey:

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    

Benim sorunum yeni sütun isimleri (10428, 10760, 12148, 11865) çünkü ilk satırı sütun adları olarak kullanmam gerekiyor.

col.names()Fonksiyonu denedim ama ihtiyacım olanı elde edemedim.

Hiç önerin var mı?

DÜZENLE

Önerin için teşekkürler!!! Kullanarak elde ederim:

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

Şimdi satır adlarını (GS ..) bir faktör sütununda dönüştürmem gerekiyor ....


1
Denedin colnames(df.aree)<-df.aree[1,];df.aree<-df.aree[2:nrow(df.aree),]mi

5
Veri çerçevelerinin doğal olarak yer değiştirmesi amaçlanmamıştır. Sizinki ise, belki de onun yerine matris biçiminde olmalıdır.
Richie Cotton

Katılıyorum; tVeri çerçevesinin oluşturulması da oldukça verimsizdir. Yapabiliyorsanız matrisi kullanın.
mbq

5
İçinde bir dize sütunu içeren bir data.frame'in dönüştürülmesi, TÜM değerleri dizelere dönüştürür! İyi değil. Çözüm için aşağıdaki cevabıma bakın.
Tommy

Yanıtlar:


109

Data.frame'i isim sütunu içindeyken aktarmasanız iyi olur - tüm sayısal değerler dizelere dönüştürülür!

Sayıları sayı olarak tutan bir çözüm:

# 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

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))

@Riccardo Eğer öyleyse, yanındaki gri tik işaretine tıklayarak cevabını kabul edin.
mbq

4
bununla ilgili bir problem - sütun isimleri faktör seviyesinin sayısal temsilini alır.
Harry Palmer

48

Sen kullanabilirsiniz transposegelen işlevi data.tablekütüphanesine. numericDeğerleri tutan basit ve hızlı çözüm 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)

4
Ayrıca, setnames(t_mtcars, rownames(mtcars))olurdu data.tablebir data.table isimleri ayarı (ve kullanma eğer -way data.tableayarladığınız olmaz nesneyi rownames)
SymbolixAU

Bu, açık ara en iyi çözüm! +1.
HelloWorld

1

Şunlardan yararlanın 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.