两个data.tables匹配列数

时间:2017-06-09 20:04:16

标签: r data.table

如果我有两个data.tables,dt1dt2,我希望列之间的匹配数使用if then逻辑。如果是dt1$V1==dt$V2,那么会dt$V1 == dt$V2吗?但是这个if-then语句的关键是按dt1$V1 == dt$V2中的匹配进行分组。我想使用data.table来提高效率,因为我实际上有一个大型数据集。

dt1 <- data.table(c("a","b","c","d","e"), c(1:5))
dt2 <- data.table(c("a","d","e","f","g"), c(3:7))

在这个虚拟示例中,V1之间有3个匹配,但V2中只有两个匹配。所以答案(使用nrow或许,如果我是子集),将是2。

3 个答案:

答案 0 :(得分:6)

我想你正在寻找fintersect

fintersect(dt1,dt2)

给出:

   V1 V2
1:  d  4
2:  e  5

要获取行数,请添加[, .N]

fintersect(dt1,dt2)[, .N]

给出:

[1] 2

答案 1 :(得分:1)

嗯,这不是很好,但是,它有效:

sum(dt1[V1 %in% dt2$V1]$V2 ==   dt2[V1 %in% dt1[V1 %in% dt2$V1]$V1]$V2)

只需阅读您的评论,如果您想要一个具有正确组合的data.table,您可以使其更长,如下所示:

dt1[V1 %in% dt2$V1][dt1[V1 %in% dt2$V1]$V2 ==   dt2[V1 %in% dt1[V1 %in% dt2$V1]$V1]$V2]

    V1 V2
1:  d  4
2:  e  5

我非常期待看到其他答案:)

答案 2 :(得分:1)

我们可以做一个join

dt1[dt2, on = names(dt1), nomatch = 0]
#   V1 V2
#1:  d  4
#2:  e  5
来自inner_join

dplyr

library(dplyr)
inner_join(dt1, dt2)
#  V1 V2
#1  d  4
#2  e  5

merge

merge(dt1, dt2)
#   V1 V2
#1:  d  4
#2:  e  5

对于上述所有情况,可以通过nrow

查找匹配数
nrow(merge(dt1, dt2))
相关问题