R 两个数据表。匹配列的数目
如果我有两个data.table,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")
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))