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 transpose
uit de bibliotheek data.table
gebruiken. Eenvoudige en snelle oplossing die numeric
waarden als numeric
houdt.
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