2012-08-18 10 views
33

Como parte de un problema mayor (añadiendo un argumento ,makeUniqueIDs-rbind.SpatialPolygonsDataFrame para situaciones en las que los ID de polígonos son idénticos), estoy corriendo en este extraño mensaje de rbind:error rbind: "Los nombres no coinciden con los nombres anteriores"

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

la única otra información que pude encontrar en esta era this question, lo que me lleva a creer que rbind estaba en la raíz del problema también.

Por supuesto, puedo escribir mi propia función tipo rbind, pero presumiblemente esta verificación match.names ocurre por alguna razón, y tengo curiosidad por saber qué es.

Respuesta

51

Los nombres del primer dataframe no coinciden con los nombres del segundo. Tal como dice el mensaje de error.

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

Si no se preocupan por los nombres de la 3ª o 4ª columnas de la segunda df, puede obligarlos a ser la misma:

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

Entonces las cosas deben proceder alegremente.

+0

D'oh . Los había revisado a ojo con 'lapply (xd, names)' pero no me di cuenta de que los números eran diferentes. –

+3

tal vez el paquete 'smartbind' del' gtools' podría ser útil. –

+0

@TylerRinker Esa es una función genial. Lo archivaré para usarlo en el futuro, pero prefiero quedarme con la base R. –

26

bastante fácil de usar la función unname():

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

rbind() necesidades de los dos nombres de objeto a ser el mismo. Por ejemplo, los primeros nombres de objeto: ID Age, los siguientes nombres de objeto: ID Gender, si desea utilizar rbind(), lo que imprimirá:

names do not match previous names

1

Use el código de la siguiente manera:

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