r语言 - 如何使用来自另一个数据框架的多个列来子集数据框架



我有两个数据帧。一个是我的主数据库,另一个是数据库的子集

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的创造者)

最新更新