2012-08-18 9 views
33

Dans le cadre d'un problème plus important (en ajoutant un argument ,makeUniqueIDs-rbind.SpatialPolygonsDataFrame pour des situations où les ID de polygone sont identiques), je suis en cours d'exécution dans ce message étrange de rbind:erreur rbind: « Les noms ne correspondent pas les noms précédents »

> do.call("rbind",xd.small) 
Error in match.names(clabs, names(xi)) : 
    names do not match previous names 

la seule autre information que je pouvais trouver sur ce point était this question, ce qui me porte à croire que rbind était à l'origine du problème là aussi.

Je peux simplement écrire ma propre fonction semblable à un rbind bien sûr, mais probablement cette vérification match.names se produit pour une raison, et je suis curieux de savoir ce que c'est.

Répondre

51

Les noms de la première image ne correspondent pas aux noms de la seconde. Tout comme le message d'erreur dit.

> identical(names(xd.small[[1]]), names(xd.small[[2]])) 
[1] FALSE 

Si vous ne vous souciez pas les noms des 3e ou 4e colonnes du deuxième df, vous pouvez les forcer à être le même:

> names(xd.small[[1]]) <- names(xd.small[[2]]) 
> identical(names(xd.small[[1]]), names(xd.small[[2]])) 
[1] TRUE 

Ensuite, les choses devraient se dérouler avec bonheur.

+0

D'oh . Je les avais vérifiés par oeil avec lapply (xd, noms) mais je n'ai pas remarqué que les chiffres étaient différents. –

+3

peut-être que le paquet 'smartbind' de' gtools' pourrait être utile. –

+0

@TylerRinker C'est une fonction sympa. Je vais le classer pour une utilisation future, mais pour cela, je préfère rester avec la base R. –

26

assez facile à utiliser la fonction unname():

data.frame <- unname(data.frame) 
3

rbind() a besoin des deux noms des objets à être le même. Par exemple, les premiers noms d'objets: ID Age, les noms suivants de l'objet: ID Gender, si vous voulez utiliser rbind(), il affichera:

names do not match previous names

1

Utilisez le code comme suit:

mylist <- lapply(pressure, function(i)read.xlsx(i,colNames = FALSE))# 
mydata <- do.call('rbind',mylist)# 
Questions connexes