2012-08-18 10 views
33

Come parte di un problema più ampio (l'aggiunta di un argomento ,makeUniqueIDs-rbind.SpatialPolygonsDataFrame per situazioni in cui gli ID dei poligoni sono identiche), che sto funzionando in questo strano messaggio da rbind:errore rbind: "nomi non corrispondono i nomi precedenti"

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

l'unica altra informazioni che ho trovato su questo era this question, il che mi porta a credere che rbind era alla radice del problema anche lì.

Posso semplicemente scrivere la mia funzione simile a rbind, ovviamente, ma presumibilmente questo controllo match.names si verifica per un motivo, e sono curioso di cosa si tratta.

risposta

51

I nomi del primo dataframe non corrispondono ai nomi del secondo. Proprio come dice il messaggio di errore.

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

Se non si preoccupano i nomi di 3 ° o 4 ° colonne della seconda df, è possibile costringerli a essere lo stesso:

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

Poi le cose dovrebbero procedere felicemente.

+0

D'oh . Li ho controllati a occhio con 'lapply (xd, nomi)' ma non ho notato che i numeri erano diversi. –

+3

forse il 'smartbind' dal pacchetto' gtools' potrebbe essere utile. –

+0

@TylerRinker Questa è una funzione interessante. Lo archivierò per un uso futuro, ma per questo preferirei stare con la base R. –

26

abbastanza facile da usare la funzione unname():

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

rbind() bisogno i due nomi degli oggetti da essere lo stesso. Ad esempio, i primi nomi degli oggetti: ID Age, i prossimi nomi degli oggetti: ID Gender, se si desidera utilizzare rbind(), sarà stampare:

names do not match previous names

1

codice Usa come segue:

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