Een dataframe transponeren

Ik moet een groot dataframe transponeren en daarom gebruikte ik:

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

Dit is wat ik krijg:

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    

Mijn probleem zijn de nieuwe kolomnamen (10428, 10760, 12148, 11865) die ik moet verwijderen omdat ik de eerste rij als kolomnamen moet gebruiken.

Ik heb het geprobeerd met de functie col.names(), maar ik krijg niet wat ik nodig heb.

Heeft u een suggestie?

BEWERKEN

Bedankt voor je suggestie!!! Door het te gebruiken verkrijg ik:

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

Nu moet ik de rijnamen (GS..) transformeren in een factorkolom….


Antwoord 1, autoriteit 100%

Je kunt het data.frame beter niet transponeren terwijl de naamkolom erin staat – alle numerieke waarden worden dan omgezet in strings!

Hier is een oplossing die getallen als getallen houdt:

# 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

Antwoord 2, autoriteit 51%

U kunt de functie transposeuit de bibliotheek data.tablegebruiken. Eenvoudige en snelle oplossing die numericwaarden als numerichoudt.

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)

Antwoord 3, autoriteit 42%

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

Antwoord 4, autoriteit 2%

Profiteer van 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

Other episodes