2016-04-16 12 views
0

他のデータフレームと比較して同じ値を持つデータフレームの行を取得するにはどうすればよいですか? 私はこれを書いたが、うまくいかなかった。特定の条件でデータフレームをサブセット化する

# 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) 

私のお気に入りの結果は次のとおりです。

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

を動作するはず? – Kirill

+0

申し訳ありませんが間違いでした、私はそれを修正しました – minoo

答えて

1

これは、Zは、ご希望の出力にから来るん

#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はあなたのために働くのですか? – Kirill