Während ich versuche, meine Daten für die Analyse fit zu machen, kann ich das nicht korrekt tun. Présumé Ich habe einen Datensätze in dieser Form:Suchen nach gemeinsamen Zeilen in R
df1
V1 V2df1
a H
b Y
c Y
df2
V1 V2df2
a Y
j H
b Y
und drei weitere (5 Datensätze von unterschiedlichen Längen alltogether). Was ich versuche zu tun, ist folgendes. Zuerst muss ich alle gängigen Elemente aus der ersten Spalte (V1) finden - in diesem Fall sind das: a, b. Dann versuche ich gemäß diesen allgemeinen Elementen ein verknüpftes Dataset zu erstellen, in dem Werte von V1 allen fünf Datasets gemeinsam sind und Werte aus anderen Spalten in derselben Zeile angehängt werden. So erklären mit einem Beispiel, mein Ergebnis sollte etwas wie folgt aussehen:
V1 V2df1 V2df2
a H Y
b Y Y
ich es geschafft, einige Code zum Laufen zu bringen, aber apperently die Ergebnisse sind nicht korrekt. Was ich tat: die Linien alle aus allen Dateien in Variablen lesen (Beispiel: a<-df1[,1]
usw.) und gemeinsame Reihen finden wie:
red<-Reduce(intersect, list(a,b,c,d,e))
dann gefiltert ich bestimmte Datensätze wie:
df1 <- unique(filter(df1, V1 %in% red))
I jeden Datensatz geordnet nach Zeile:
df1<-data.frame(df1[with(df1, order(V1)),])
gelöscht und Duplikate (der Elemente in dem ersten Spalte):
df1<- df1[unique(df1$V1),]
Ich habe dann einen neuen Datensatz mit:
newdata<-data.frame(V1common=df1[,1], V2df1=df1[,2],V2df2=df2[,2]...)
... bedeutet für alle fünf Datensätzen. Ich habe tatsächlich die gleiche Anzahl von Zeilen (ein gutes Zeichen, da es die gleiche Anzahl von Zeilen innerhalb der Kreuzung gibt), und fügte dann andere sortierte Spalten hinzu, aber etwas summiert sich nicht. Danke für jeden Hinweis. (Ich habe die Verwendung von Bibliotheken und so weggelassen, der Code dient zur Veranschaulichung).
See '? Merge'. Ich denke, dass 'merge (df1, df2)' das sein wird, wonach Sie suchen. – nicola
Im Allgemeinen empfehlen wir die Erwähnung der Bibliotheken, denke ich. Wie R-Leute vielleicht nicht "Filter" (abgesehen von der Zeitreihenfunktion in der Basis R) kennen. – Frank
Erweitern nicolas Idee, für mehrere Datensätze, verwenden Sie 'Reduce' mit' merge', dh 'Reduce (Funktion (...) merge (..., durch = 'V1'), mget (paste0 ('df', 1 : 5))) ' – akrun