2014-10-27 71 views
2

我的头目前仍然静止不动。我想根据较小的data.frame(mdf)中的列匹配/提取较大的data.frame(df)中的数据。我遇到的问题是我想匹配多列(在这种情况下是两列)。我尝试过使用不同的方法mergewhich,match%in%但未成功。基于多列匹配两个data.frames

# Dummy example 

# Large df 
df <- mtcars[1:6,1:3] 
df$car_1 <- rownames(df) 
df$car_2 <- rownames(tail(mtcars)) 

# df to match 
mdf <- df[c("car_1","car_2")][3:6,] 

rownames(df) <- NULL 
rownames(mdf) <- NULL 

所需的输出会看起来像

mpg cyl disp    car_1   car_2 
22.8 4 108  Datsun 710 Ford Pantera L 
21.4 6 258 Hornet 4 Drive Ferrari Dino 
18.7 8 360 Hornet Sportabout Maserati Bora 
18.1 6 225   Valiant  Volvo 142E 

这种感觉应该是很简单的。

任何指针将不胜感激,谢谢!

回答

5

merge(df, mdf, all.x = FALSE, all.y = TRUE)怎么样?

编辑:如果你有不同的列名,你可以指定要合并的哪些,例如:

names(mdf) <- c("car_3", "car_4") 
merge(df, mdf, by.x = c("car_1", "car_2"), by.y = c("car_3", "car_4"), 
     all.x = FALSE, all.y = TRUE) 
+0

啊!我确实尝试过,但我的问题是另一个。我的列在x = x,y = y方式(dooh')中不匹配。非常感谢! – 2014-10-28 13:54:07

+0

@jO。看到我的编辑,你仍然应该可以使用'merge'。 – 2014-10-28 14:30:29

+0

干杯,真棒! – 2014-10-28 14:56:12

4

另一种方法是:

library(dplyr) 
inner_join(df, mdf) 

#Joining by: c("car_1", "car_2") 
#    car_1   car_2 mpg cyl disp 
#1  Datsun 710 Ford Pantera L 22.8 4 108 
#2 Hornet 4 Drive Ferrari Dino 21.4 6 258 
#3 Hornet Sportabout Maserati Bora 18.7 8 360 
#4   Valiant  Volvo 142E 18.1 6 225 
+0

非常感谢(对我)新方法! :) – 2014-10-28 13:55:32

+0

@jO。乐趣!如果你愿意,还可以看一下'dplyr'中的其他连接选项。 – jazzurro 2014-10-28 13:57:10