web-dev-qa-db-fra.com

attribuer des en-têtes en fonction de la ligne existante dans la structure de données dans R

Après avoir transformé une base de données, j'aimerais attribuer des têtes/noms aux colonnes en fonction d'une ligne existante . Mes en-têtes sont actuellement: 

row.names   X2  X3  X4  X5  X6  X7  X8  X9  ...

Je voudrais me débarrasser de cela et utiliser la ligne suivante comme en-tête de colonne (sans avoir à les taper car j'en ai beaucoup).

La seule solution que j'ai pour cela est d'exporter et de recharger les données (avec en-tête = T).

37
user3166363

La clé ici est de désélectionner la ligne en premier.

colnames(DF) <- as.character(unlist(DF[1,]))
DF = DF[-1, ]
51
Vishnu Jayanand

Essaye ça:

colnames(DF) = DF[1, ] # the first row will be the header
DF = DF[-1, ]          # removing the first row.

Cependant, vérifiez si les données ont été correctement lues. Si vous avez data.frame des variables numériques mais que la première ligne était des caractères, toutes les données ont été lues comme des caractères. Pour éviter ce problème, il est préférable de sauvegarder les données et de les relire avec header = TRUE comme vous le suggérez.

50

Très similaire à la réponse de Vishnu, mais utilise lapply pour mapper toutes les données sur des caractères, puis pour les affecter comme en-têtes. Ceci est vraiment utile si vos données sont importées en tant que facteurs.

DF[] <- lapply(DF, as.character)
colnames(DF) <- DF[1, ]
DF <- DF[-1 ,]

notez que si vous avez beaucoup de données numériques ou de facteurs que vous souhaitez, vous devrez les reconvertir. Dans ce cas, il peut être judicieux de stocker le cadre de données de caractères, d'extraire la ligne souhaitée et de l'appliquer ensuite au cadre de données d'origine.

tempDF <- DF
tempDF[] <- lapply(DF, as.character)
colnames(DF) <- tempDF[1, ]
DF <- DF[-1 ,]
tempDF <- NULL
0
blakiseskream