2017-10-03 1 views
1

In R ist es möglich, Zeilen aus vorhandenen Datenrahmen in einen neuen Datenrahmen zu ziehen, basierend darauf, ob die Zeilen eine identische Zeichenfolge in einer bestimmten Spalte ohne Angabe enthalten Was ist das für eine Saite? ZB wo immer Zeilen vorhanden sind, die in einer bestimmten Spalte übereinstimmen, unabhängig vom Inhalt, um diese Zeilen auszuwählen und sie zu einem neuen Datenrahmen hinzuzufügen?Übertragen von Zeilen mit übereinstimmenden Zeichenfolgen aus Datenrahmen ohne Angabe von Zeichenfolgeninhalten in R

Eine Abbildung: Angesichts der beiden Datenrahmen

a1 <- data.frame(a = letters[1:14], b=1:14) 
    a2 <- data.frame(a = letters[26:13],b=1:14) 

sie zwei identische Werte in der zweiten Spalte: a1 [13,1] & a2 [14,1] sind "m", während a1 [14,1] & a2 [13,1] sind "n". Was ich suche ausgegeben würde zwei Datenrahmen wie:

b1 <- data.frame(a = c("a1","a2"),b = c(a1[13,1],a2[14,1]),c = c(a1[13,2],a2[14,2])) 
    b2 <- data.frame(a = c("a1","a2"),b = c(a1[14,1],a2[13,1]),c = c(a1[14,2],a2[13,2])) 

, so dass in der Spalte ein, aus dem der Datenrahmen die Reihen würde wurden gezogen werden erwähnt, und in Spalten b und c, die zwei Beobachtungen von den ursprünglichen Datenrahmen würden reproduziert werden.

Ich verstehe, wie Sie dies mit einer angegebenen Zeichenfolge tun, nur nicht wie es für eine nicht spezifische übereinstimmende Zeichenfolge zu tun! Ich entschuldige mich, wenn das wirklich grundlegend oder überflüssig ist, das ist für mich extrem neu. Dank

Antwort

0

Sie können etwas tun:

a1 <- data.frame(a = letters[1:14], b=1:14, stringsAsFactors = FALSE) 
a2 <- data.frame(a = letters[26:13],b=1:14, stringsAsFactors = FALSE) 

# Matching entries in column "a" from dataframes a1 and b2 
m <- intersect(a1$a, a2$a); 

# Return list of dataframes for every matching element 
ret <- lapply(m, function(x) 
    rbind.data.frame(
     c(src = "a1", a1[which(a1$a == x), ]), 
     c(src = "a2", a2[which(a2$a == x), ]))) 
names(ret) <- c("b1", "b2") 
ret 

#$b1 
# src a b 
#1 a1 m 13 
#2 a2 m 14 
# 
#$b2 
# src a b 
#1 a1 n 14 
#2 a2 n 13 

Wohlgemerkt: Ich kann eine Situation nicht denken, wo dies eine nützliche Sache zu tun wäre. Vielleicht/wahrscheinlich bekomme ich nicht das vollständige Bild. Oder vielleicht müssen Sie Ihren Ansatz überdenken?

Beachten Sie auch, dass Sie stringsAsFactors = FALSE verwenden müssen, wenn Sie b1 und b2 möchten, um das tatsächliche übereinstimmende Zeichen (statt der Faktorstufe) anzuzeigen. In Ihrem obigen Beispiel erhalten Sie in der zweiten Spalte b1 und b2 die Faktorstufe. Nochmal nicht sicher, was du eigentlich willst.

Verwandte Themen