2012-08-18 18 views
33

Als Teil eines größeren Problems (Hinzufügen eines ,makeUniqueIDs Argument rbind.SpatialPolygonsDataFrame für Situationen, in denen die Polygon-IDs identisch sind), ich laufe in diese seltsame Nachricht von rbind:rbind Fehler: „Namen nicht übereinstimmen frühere Namen“

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

die einzigen anderen Informationen, die ich auf diese finden konnte, waren this question, was mich an der Wurzel des Problems führt zu glauben, dass rbind es auch war.

Ich kann natürlich nur meine eigene rbind-ähnliche Funktion schreiben, aber diese match.names Überprüfung geschieht aus einem bestimmten Grund, und ich bin gespannt, was es ist.

Antwort

51

Die Namen des ersten Datenrahmens stimmen nicht mit denen des zweiten überein. Genau wie die Fehlermeldung sagt.

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

Wenn Sie über die Namen der 3. oder 4. Spalten der zweiten df nicht kümmern, können Sie sie zwingen die gleiche zu sein:

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

Dann glücklich gehen Dinge sollten.

+0

D'oh . Ich habe sie mit "lapply (xd, names)" überprüft, bemerkte aber nicht, dass die Zahlen anders waren. –

+3

vielleicht könnte das 'smartbind' von' gtools' Paket nützlich sein. –

+0

@TylerRinker Das ist eine coole Funktion. Ich werde es für den zukünftigen Gebrauch ablegen, aber dafür bleibe ich lieber bei Base R. –

26

leicht genug, um die unname() Funktion zu verwenden:

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

rbind() braucht, um die zwei Objektnamen identisch zu sein. Zum Beispiel können die ersten Objektnamen: ID Age, die nächste Objektnamen: ID Gender, wenn Sie rbind() verwenden möchten, wird es ausdrucken:

names do not match previous names

1

Benutzen Sie den Code wie folgt:

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