R Abgleich mit mehr als 2 Bedingungen und Rückgabe der Antwort Wert
Hallo, ich habe zwei Daten festlegen, wo die erste ist ein Satz von index:
ind1<-rep(c("E","W"), times=20)
ind2<-sample(100:150, 40)
y<-c(1:40)
index<-data.frame(cbind(ind1, ind2, y))
Zweiten Daten-set ist ein muss indiziert werden.
x1<-sample(c("E","W","N"), 40, replace=TRUE)
x2<-sample(100:150, 40)
x3<-rep(0, times=40)
data<-data.frame(cbind(x1,x2,x3))
Möchte ich angeben, in x3
wo die x1
und x2
im data
werden abgestimmt mit ind1
und ind2
im index
bzw. und Rücksendung der entsprechenden y
.
index1<-split(index, index$ind1)
data1<-split(data, data$x1)
data1$E$x3<-match(data1$E$x2, index1$E$ind2)
data1$W$x3<-match(data1$W$x2, index1$W$ind2)
Es ist irgendwie aufeinander abgestimmt, wie ich wollte, aber kam nicht zurück y
richtig. Das Teil habe ich falsch gemacht?
Danke.
Außerdem gibt es eine schnellere/intelligentere Weg, es zu tun? Da hätte ich ja mehr Bedingungen entsprechen. Ursprünglich wollte ich, wenn else-Anweisung, aber hat nicht funktioniert.
InformationsquelleAutor lamushidi | 2013-08-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
geben Sie die
x
undy
Werte für die jeweils passende Kombination vonind1
undind2
, undx1
undx2
. Alle Kombinationen vonx1
undx2
gehalten werden (auch wenn dass die Kombination vonind1
undind2
kommt nicht inindex
, sondern Kombinationen vonind1
undind2
, die nicht auftreten, indata
gelöscht werden. Wie geschrieben, die Lösung haltenx3
undy
Werte, aber wenn Sie möchten, um die dropy
Werte, die Sie verwenden könnenmerge(data[ ,-3], ...
als pro @Ferdinand.kraft 's Vorschlag.merge(data[,-3], index, by.y=c("ind1", "ind2"), by.x=c("x1", "x2"), all=TRUE)
?Wow, danke. Vielleicht habe ich nicht meine Frage ist deutlich genug. Ich brauche, um
data
wie ist es mit dem passendeny
nachindex
.Ich glaube, ich habe es. @Drew Steen 's-Lösung, um nur die passenden Paare. Dann verwenden Sie @Ferdinand.kraft 's solotion Zusammenführen, die passende Paare mit
data
. Danke Euch beiden. 😀Bearbeitet zu reflektieren @Ferdinand.kraft-Punkt - obwohl mein Verständnis ist jetzt, dass die OP will, um alle Kombinationen von
x1
undx2
imdata
, aber ist OK fallen Kombinationen vonind1
undind2
erscheinen, dass inindex
aber nicht indata
.InformationsquelleAutor Drew Steen
Gibt es viele Möglichkeiten, dies zu nähern, und es hängt wirklich von den Eigenschaften der Daten. Hier ist die direkte matching-Ansatz:
Einfügen: Die 'einfügen' - Funktion ermöglicht Ihnen das erstellen einer Zeichenfolge aus mehreren Stücke von Daten. Wenn Sie ein matching zwischen Datensätzen mithilfe von Spalten, die identisch entspricht, können Sie einfach fügen Sie die Spalten zusammen und vergleichen Sie direkt mit einem 'match' - Anweisung, etwa so:
Die match-Anweisung hier vergleicht genaue übereinstimmungen zwischen x1+x2 und ind1+ind2-Paare und gibt eine Ganzzahl zurück, die angibt, welche index-pair-Mädchen-Position entspricht jede Datenzeile. Wenn keine übereinstimmung gefunden wird, NA zurückgegeben. Durch die überprüfung für NA in 'ifelse' Aussage, wir schreiben dann Nullen für die NA-Werte und Rückkehr der entsprechende y-Wert für keine übereinstimmung.
es scheint, dass Ihre Lösung ist buggy. Es erzeugt keine genau übereinstimmende Werte. Der richtige Weg wäre, um den index$y[match (......)] gefolgt von einem ist.na-Anweisung zu ersetzen, NA das mit dem Nullen.
InformationsquelleAutor Dinre
können Sie auch
left_join()
ausdplyr
Paket:Lesen Sie mehr hier
InformationsquelleAutor Woldemar G