我有两个数据帧。一个是我的主数据库,另一个是数据库的子集
print(database)
col1 col2 x y
### ### 1 1
### ### 2 3
### ### 4 5
print(selection)
x y
1 1
2 3
我需要从"database"有x和y坐标反映在选择中。我知道我可以使用&;子集()&;操作符,使用选择标准从数据库中提取行,例如
subset(database, database$x == 1 & database$y == 1)
将返回数据库中的第一行。但是,如何应用此选择运算符来搜索多个选择条件呢?我可以尝试的一种方法是使用嵌套的for循环和如上所述的子集操作符,但在我看来,在R中使用for循环显然是不受欢迎的,所以一定有更好的方法来实现它。
您可以在dplyr中运行join:
matches <- database %>%
inner_join(selection, by=c("x","y"))
在同一数据框架中进行选择的示例应该是:
子集(数据库,x == 1 &Y == 1)
但是要回答你的问题,你可以使用merge
:
merge(database, selection, by=c("x","y") )
也可以在"选择"数据框架的名称与目标数据框架的名称不同。更多示例参见?merge
。
使用dplyr,可以通过以下方式实现:res <- dplyr::inner_join(database, selection, by = c("x" = "x", "y" = "y"))
对于大表,dplyr的函数inner_join()比merge()快得多。
其他优点有:
- 行保持现有顺序
- 告诉您要合并的键(如果您不提供)
- 也适用于数据库表。(来自Hadley Wickham, dplyr的创造者)