web-dev-qa-db-fra.com

Ajouter des colonnes vides à un cadre de données avec les noms spécifiés d'un vecteur

J'ai un dataframe, df, avec déjà un certain nombre de colonnes de données. J'ai un vecteur, namevector, plein de chaînes. J'ai besoin de colonnes vides ajoutées à df avec les noms des colonnes de namevector.

J'essaye d'ajouter des colonnes avec cette boucle for, en itérant chaque chaîne dans namevector.

for (i in length(namevector)) {
  df[, i] <- NA
}

mais je reste avec cette erreur:

Error in `[<-.data.frame`(`*tmp*`, , i, value = NA) : 
  new columns would leave holes after existing columns

Sinon, j'ai envisagé de créer une base de données vide avec les noms corrects, puis cbind- associer les deux bases de données, mais je ne sais pas comment procéder pour la coder.

Comment pourrais-je résoudre ce problème?

35
user2631296

Le problème avec votre code est dans la ligne:

for(i in length(namevector))

Vous devez vous demander: qu'est-ce que length(namevector)? C'est un numéro. Donc, essentiellement, vous dites:

for(i in 11)
df[,i] <- NA

Ou plus simplement:

df[,11] <- NA

C'est pourquoi vous obtenez une erreur. Ce que tu veux c'est:

for(i in namevector)
    df[,i] <- NA

Ou plus simplement:

df[,namevector] <- NA
53
Señor O
set.seed(1)
example <- data.frame(col1 = rnorm(10, 0, 1), col2 = rnorm(10, 2, 3))
namevector <- c("col3", "col4")
example[ , namevector] <- NA

example
#          col1       col2 col3 col4
# 1  -0.6264538  6.5353435   NA   NA
# 2   0.1836433  3.1695297   NA   NA
# 3  -0.8356286  0.1362783   NA   NA
# 4   1.5952808 -4.6440997   NA   NA
# 5   0.3295078  5.3747928   NA   NA
# 6  -0.8204684  1.8651992   NA   NA
# 7   0.4874291  1.9514292   NA   NA
# 8   0.7383247  4.8315086   NA   NA
# 9   0.5757814  4.4636636   NA   NA
# 10 -0.3053884  3.7817040   NA   NA
20
dayne

Le ci-dessous fonctionne pour moi

dataframe[,"newName"] <- NA

Assurez-vous d'ajouter "" pour la nouvelle chaîne de nom.

9
Shubham