2016-04-16 4 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

Где делает Z приходит из вашего желаемого результата? – Kirill

+0

Извините, это была ошибка, я исправил ее – minoo

ответ

1

Это должно работать

#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