2017-07-13 2 views
1

donc je la question data.table suivante:.Problème avec changement de nom data.table

library(data.table) 
dt1<-data.table(V1=runif(10),V2=sample(10),ID=1:10) 
    dt1 
       V1 V2 ID 
    1: 0.26880759 10 1 
    2: 0.59148373 9 2 
    3: 0.15106101 8 3 
    4: 0.64780998 5 4 
    5: 0.09067745 7 5 
    6: 0.57337100 2 6 
    7: 0.17920313 3 7 
    8: 0.87948063 4 8 
    9: 0.25167438 1 9 
    10: 0.82715461 6 10 

et je suis désireux d'effectuer un changement de nom de la colonne (à l'exception d'une colonne, à savoir le « ID ») Bien que names(dt1[,-"ID"]) œuvres OK cédant:

[1] "V1" "V2" 

la commande suivante échoue:

names(dt1[,-"ID"])<-c("souksou","mouksou") 
    Error in -"ID" : invalid argument to unary operator 

Bien sûr, la question est déri SSED via:

names(dt1)[!(names(dt1) %in% "ID")]<-c("souksou","mouksou") 

names(dt1) 
[1] "souksou" "mouksou" "ID" 

Ma question à la communauté est pourquoi cela se produit.

+2

vous devez utiliser la fonction 'setnames' – Cath

+0

@Cath élaborer un peu ... – amonk

+1

' setnames (DT1, c ("V1", « V2 "), c (" souksou "," mouksou "))". 'setnames' est le moyen de renommer les colonnes par référence dans un' data.table'. – Cath

Répondre

1

Pour mettre mon commentaire dans une réponse plus visible: dans , la fonction setnames permet de renommer les colonnes (toutes ou un sous-ensemble d'entre eux) par référence.

Essayez ?setnames pour voir comment cela fonctionne. Fondamentalement, vous devez donner la fonction 3 arguments, x, old et new: est votre data.table, old sont les noms ou les indices des variables que vous voulez renommer (si vous voulez renommer toutes les variables, old peut être les nouveaux noms et vous n'avez pas besoin de fournir new) et new sont les nouveaux noms de colonnes.

Dans votre exemple, vous devez faire:

setnames(dt1, c("V1", "V2"), c("souksou","mouksou"))