ich zwei Datenrahmen haben:Suche schneiden zwischen Datenrahmen Spalten und einem zweiten Datenrahmen
Datenrahmen A
v1 v2 v3
1 wn123 wrr002 tee893
2 ms567 NA NA
3 NA sud3003 wrt2229
4 wrs92929 wrw036 syc3647
Datenrahmen B
ID TN
1 ms567
2 sud3003
3 syc3647
4 wn123
5 wrr002
6 wrs92929
7 wrt2229
8 wrw036
Ich mag kommt es zu Überschneidungen zwischen den drei Spalten finden (pro Zeile, dass alle Elemente pro Zeile in den Spalten v1, v2 und v3) des Datenrahmens A und der gesamten Spalte des Datenrahmens B $ x.
Die gewünschte Ausgabe als neue Datenrahmen C ist wie folgt:
v1 v2
wn123 wrr002
ms567 NA
sud3003 wrt2229
syc3647 wrw036 syc3647
ich den Code so zu schreiben versucht:
getIntersect <- function(x,y){
return(intersect(x,y))
}
data.frame(apply(A[v1:v3],2, function(x){getIntersect(x,B$TN)}))
Der Code hat nicht funktioniert. Irgendwelche Vorschläge, wie man diesen Code funktioniert, bitte?
ich nicht bekommen Ihr:
Dies kann durch rehaping von weiten zu langen Format
melt()
, Fügen im Langformat und Umformen wieder auf Wide-Format mitdcast()
gelöst werden Ausgabe. Warum sind nur zwei Variablen darin? Sie können tun, was Sie wollen mit 'lapply (df, function (x) schneiden (x, df2 $ TN))'. – LAPDanke für das @ LAP. Ich habe die Ausgabe jetzt korrigiert. Ich war in der Lage, die richtige Ausgabe ohne Datenrahmen mit diesem zu erhalten: apply (A [1: 3], 1, Funktion (x) schneiden (x, B $ x)). Aber ich habe Fehler damit: data.frame (apply (A [1: 3], 1, Funktion (x) schneiden (x, B $ x)), na.strings = c ("", "NA")) wie folgt: ... Fehler in (function (..., row.names = NULL, check.rows = FALSCH, check.names = TRUE,: Argumente implizieren unterschiedliche Anzahl von Zeilen: 2, 1, 3 –
I ' Ich bin nicht sicher, ob die gewünschte Ausgabe korrekt ist. 'wrs92929' in Zeile 4 von' A' steht auch in 'B'. – Uwe