web-dev-qa-db-fra.com

Transposer un cadre de données

Je dois transposer un grand bloc de données et j'ai donc utilisé:

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

Voici ce que j'obtiens:

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    

Mon problème est les nouveaux noms de colonne (10428, 10760, 12148, 11865) que je dois éliminer car je dois utiliser la première ligne en tant que noms de colonne.

J'ai essayé avec la fonction col.names() mais je n'ai pas obtenu ce dont j'avais besoin.

Avez-vous une suggestion?

MODIFIER

Merci pour votre suggestion !!! En l'utilisant, j'obtiens:

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

Maintenant, je dois transformer les noms de ligne (GS ..) dans une colonne de facteur ....

93
Riccardo

Vous feriez mieux de ne pas transposer le nom data.fr lorsque le nom de la colonne est dedans - toutes les valeurs numériques seront alors transformées en chaînes!

Voici une solution qui conserve les nombres sous forme de nombres:

# 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
94
Tommy
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))
46
Frank

Vous pouvez utiliser la fonction transpose de la bibliothèque data.table. Solution simple et rapide qui conserve les valeurs de numeric comme 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)
34
rafa.pereira