2016-04-16 9 views
0

Wie bekomme ich Zeilen eines Datenrahmens, der einen gleichen Wert in einem Element des Vergleichs mit einem anderen Datenrahmen hat? Ich habe dies geschrieben, aber es hat nicht funktioniert.Subseting einen Datenrahmen unter einer bestimmten Bedingung

# example of two data frame 

    df1 <- data.frame(V1 = c("a", "g", "h", "l", "n", "e"), V2 = c("b", "n", "i", "m", "i", "f"), stringsAsFactors = F) 

    df2 <- data.frame(V1 = c("a", "c", "f","h"), V2 = c("b", "d", "e","z"), stringsAsFactors = F) 

    # finding joint values in each element of two data frames 
    res1<-intersect(df1$V1,df2$V1) 
    res2<-intersect(df1$V2,df2$V2) 
    res3<-intersect(df1$V1,df2$V2) 
    res4<-intersect(df1$V1,df2$V2) 
    # Getting rows that has joint value at least in one element of df1 
    ress1<-df1[apply(df1, MARGIN = 1, function(x) all(x== res1)), ] 
    ress2<-df1[apply(df1, MARGIN = 1, function(x) all(x== res2)), ] 
    ress3<-df1[apply(df1, MARGIN = 1, function(x) all(x== res3)), ] 
    ress4<-df1[apply(df1, MARGIN = 1, function(x) all(x== res4)), ] 

    # Getting rows that has joint value at least in one element of df2 
    resss1<-df2[apply(df2, MARGIN = 1, function(x) all(x== res1)), ] 
    resss2<-df2[apply(df2, MARGIN = 1, function(x) all(x== res2)), ] 
    resss3<-df2[apply(df2, MARGIN = 1, function(x) all(x== res3)), ] 
    resss4<-df2[apply(df2, MARGIN = 1, function(x) all(x== res4)), ] 

    # then combine above results 

    final.res<-rbind(ress1,ress2,ress3,ress4,resss1,resss2,resss3,resss4) 

Mein Lieblings Ergebnis ist:

a b 
h z 
h i 
f e 
e f 
+0

arbeiten Wo kommt der Z aus in der gewünschten Ausgabe kommen? – Kirill

+0

Entschuldigung Es war ein Fehler, ich habe es behoben – minoo

Antwort

1

Dies sollte

#Import data 
df1 <- data.frame(V1 = c("a", "g", "h", "l", "n", "e"), V2 = c("b", "n", "i", "m", "i", "f"), stringsAsFactors = F) 
df2 <- data.frame(V1 = c("a", "c", "f","h"), V2 = c("b", "d", "e","z"), stringsAsFactors = F) 

# Get the intersects 
vals <- intersect(c(df1$V1, df1$V2), c(df2$V1, df2$V2)) 

#Get the subsets and rbind them 
full <- rbind(
subset(df1, df1$V1 %in% vals), 
subset(df1, df1$V2 %in% vals), 
subset(df2, df2$V1 %in% vals), 
subset(df2, df2$V2 %in% vals) 
) 

#Remove duplicates 
full <- full[!duplicated(full),] 
+0

@minoo funktioniert es für dich? – Kirill