R 两个数据表。匹配列的数目

R 两个数据表。匹配列的数目,r,data.table,R,Data.table,如果我有两个data.table,dt1和dt2,我需要使用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")

如果我有两个data.table,
dt1
dt2
,我需要使用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))

dt1这并不漂亮,但是,它可以工作:

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

我很期待看到其他答案:)

我想你是在寻找
fintersect

fintersect(dt1,dt2)
给出:

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

fintersect(dt1,dt2)[, .N]
其中:


我们可以做一个
join

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

内部连接
来自
dplyr

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

或与
合并

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

对于以上所有内容,可通过
nrow

nrow(merge(dt1, dt2))

若我的输出是匹配答案的data.table,那个就最好了。当然,我可以合并data.tables。然后我将使用某种带有“by”的组子集。类似于:“by=dt1$V1==dt2$V2”的逻辑是我需要的。可能是@akrun No.IMHO的重复,因为OP没有要求合并/加入。OP要求查找公共元素。那么,现在你是在指责我你自己的标准做法吗?@akrun即使其中一个答案是使用内部连接,也不意味着这个问题是重复的。您的副本中没有一个答案提到
fintersect()
merge(dt1, dt2)
#   V1 V2
#1:  d  4
#2:  e  5
nrow(merge(dt1, dt2))