डेटा फ़्रेम ट्रांसफ़ॉर्म करें


107

मुझे एक बड़े डेटा फ़्रेम को स्थानांतरित करने की आवश्यकता है और इसलिए मैंने इसका उपयोग किया:

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

यह वही है जो मुझे प्राप्त होता है:

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    

मेरी समस्या नए कॉलम नाम (10428, 10760, 12148, 11865) है जिन्हें मुझे समाप्त करने की आवश्यकता है क्योंकि मुझे कॉलम नामों के रूप में पहली पंक्ति का उपयोग करने की आवश्यकता है।

मैंने col.names()फ़ंक्शन के साथ प्रयास किया लेकिन मुझे वह नहीं मिला जिसकी मुझे आवश्यकता है।

क्या आपके पास कोई सुझाव है?

संपादित करें

तुम्हारे सुझाव के लिए धन्यवाद!!! इसका उपयोग करके मुझे प्राप्त होता है:

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

अब मुझे एक कारक स्तंभ में पंक्ति नामों (GS ..) को बदलने की आवश्यकता है ...।


1
क्या आपने कोशिश की है colnames(df.aree)<-df.aree[1,];df.aree<-df.aree[2:nrow(df.aree),]?

5
डेटा फ़्रेम स्वाभाविक रूप से ट्रांसपोज़र होने के लिए नहीं हैं। यदि आपका है, तो शायद इसके बजाय मैट्रिक्स रूप में होना चाहिए।
रिची कॉटन

इस बात से सहमत; tआईएनजी डेटा फ्रेम भी काफी अक्षम है। यदि आप कर सकते हैं, तो मैट्रिक्स का उपयोग करें।
mbq

5
एक data.frame ट्रांसपोज़ करना जिसमें एक स्ट्रिंग कॉलम होता है वह सभी मानों को स्ट्रिंग्स में बदल देता है! अच्छा नही। एक काम के लिए नीचे मेरा जवाब देखें।
टॉमी

जवाबों:


109

बेहतर होगा कि आप डेटा.फ्रेम को स्थानांतरित न करें जबकि नाम स्तंभ इसमें है - सभी संख्यात्मक मान फिर तार में बदल जाएंगे!

यहाँ एक समाधान है जो संख्याओं को संख्याओं के रूप में रखता है:

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

@ रिचर्डक यदि ऐसा है, तो उसके बगल में एक ग्रे टिक पर क्लिक करके उसके उत्तर को स्वीकार करें।
mbq

4
इसके साथ एक समस्या है - स्तंभ नाम कारक स्तर का संख्यात्मक प्रतिनिधित्व लेते हैं।
हैरी पामर

48

आप लाइब्रेरी transposeसे फ़ंक्शन का उपयोग कर सकते हैं data.table। सरल और तेज समाधान जो numericमानों को रखता है 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
भी setnames(t_mtcars, rownames(mtcars))होगा data.tableएक data.table पर नाम की स्थापना (और एक का उपयोग कर यदि का -तरह data.tableवस्तु आप सेट नहीं होगा rownames)
SymbolixAU

यह अब तक का सबसे अच्छा उपाय है! +1।
HelloWorld

1

का लाभ लें 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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.