如何计算R中data.table中的出现次数组合
我有两个数据表。我想计算与另一个表中的一个表的组合相匹配的行数。我已经检查了data.table文档,但没有找到答案。我使用的是数据。表1.9.2如何计算R中data.table中的出现次数组合,r,data.table,summarization,R,Data.table,Summarization,我有两个数据表。我想计算与另一个表中的一个表的组合相匹配的行数。我已经检查了data.table文档,但没有找到答案。我使用的是数据。表1.9.2 DT1 <- data.table(a=c(3,2), b=c(8,3)) DT2 <- data.table(w=c(3,3,3,2,3), x=c(8,8,8,3,7), z=c(2,6,7,2,2)) DT1 # a b # 1: 3 8 # 2: 2 3 DT2 # w x z # 1: 3 8 2 # 2: 3 8
DT1 <- data.table(a=c(3,2), b=c(8,3))
DT2 <- data.table(w=c(3,3,3,2,3), x=c(8,8,8,3,7), z=c(2,6,7,2,2))
DT1
# a b
# 1: 3 8
# 2: 2 3
DT2
# w x z
# 1: 3 8 2
# 2: 3 8 6
# 3: 3 8 7
# 4: 2 3 2
# 5: 3 7 2
预期结果:
# a b count_combination_in_dt2
# 1: 3 8 3
# 2: 2 3 1
您只需添加
by=list(a,b)
编辑:更多详细信息:在原始版本中,您使用了DT2[DT1,nomatch=0]
(因为您使用了所有a,b
组合。如果要使用J(a,b)
对于每个a、b
组合,您需要分别使用by
参数。然后将数据.table
按a、b
分组,并在每组中计算nrow(…)
。设置键(DT2,w,x)
setkey(DT2, w, x)
DT2[DT1, .N, by = .EACHI]
# w x N
#1: 3 8 3
#2: 2 3 1
# In versions <= 1.9.2, use DT2[DT1, .N] instead
DT2[DT1,.N,by=.EACHI]
#w x N
#1: 3 8 3
#2: 2 3 1
#在版本中,谢谢!可以在DT1中分配结果列吗?我尝试了DT2[DT1,count\u composition\u In_DT2:=.N],但它不起作用。DT1[,count:=DT2[DT1,.N][,N]]起作用,与第一个解决方案相比速度非常快。
DT1[,count_combination_in_dt2:=nrow(DT2[J(a,b),nomatch=0]), by=list(a,b)]
DT1
##
## a b count_combination_in_dt2
## 1: 3 8 3
## 2: 2 3 1
setkey(DT2, w, x)
DT2[DT1, .N, by = .EACHI]
# w x N
#1: 3 8 3
#2: 2 3 1
# In versions <= 1.9.2, use DT2[DT1, .N] instead