如何比较和制表r中两个向量之间的公共元素频率

如何比较和制表r中两个向量之间的公共元素频率,r,compare,frequency,elements,R,Compare,Frequency,Elements,我有两个向量,它们有公共元素和重复元素。我想要一个表格,比较两个向量中公共元素的频率。这里是子集 plyr::count(V1) x freq 1 A*02:01 106 2 A*02:02 88 3 A*03:01 95 4 A*03:02 60 plyr::count(V2) x freq 1 A*02:01 11 2 A*02:02 11 3 A*02:04 1 4 A*03:01 20 我想要的

我有两个向量,它们有公共元素和重复元素。我想要一个表格,比较两个向量中公共元素的频率。这里是子集

plyr::count(V1)
          x freq
1  A*02:01  106

2  A*02:02   88

3  A*03:01   95

4  A*03:02   60

plyr::count(V2)

   x freq

1  A*02:01   11

2  A*02:02   11

3  A*02:04    1

4  A*03:01   20
我想要的输出是:

   x  freq.V1  freq.V2

1  A*02:01    106     11 


2  A*02:02     88     11


3  A*03:01     60     20

只需使用
表格

tbl1 <- table(V1[V1 %in% (int <- intersect(unique(V1), unique(V2)))])
tbl2 <- table(V2[V2 %in% int])

data.frame(x = names(tbl1), freq.V1 = as.vector(tbl1), freq.V2 = as.vector(tbl2))
library(data.table)
DT <- data.table(V1 = V1, V2 = V2)

DT[V1 %in% unique(V2), .(freq.V1 = .N), by = .(x = V1)
   ][DT[V2 %in% unique(V1), .N, by = .(x = V2)],
     freq.V2 := i.N, on = "x", nomatch = 0L]
当然,如果您事先知道
V1
V2
由同一组元素组成,那么这两个选项看起来都简单得多:

data.frame(x = names(tbl1 <- table(V1)), freq.V1 = as.vector(tbl1),
           freq.V2 = as.vector(table(V2)))

我认为
merge
在这里似乎是一个不错的选择,因为默认情况下是保持两个数据集的观察结果是相同的。因此,下面的方法应该有效

merge(plyr::count(V1), plyr::count(V2), by="x")
工作实例

plyr::count(mtcars$gear)
#   x freq
# 1 3   15
# 2 4   12
# 3 5    5
plyr::count(mtcars$gear[1:10])
#   x freq
# 1 3    4
# 2 4    6

merge(
plyr::count(mtcars$gear),
plyr::count(mtcars$gear[1:10]), 
by="x")
#   x freq.x freq.y
# 1 3     15      4
# 2 4     12      6

谢谢你的回复;然而,我没有得到预期的结果与前两个选项。我应该提到向量的长度不同。有些元素是两者的共同点,而另一些元素则是独一无二的。我认为你的代码是循环长度较小的向量。我从你的第一个代码中得到的结果显示两个向量的频率相同。忽略我之前的注释MichaelChirico,你的方法是working.ps。输出的最后一行是否应该是
A*03:01 95 20
plyr::count(mtcars$gear)
#   x freq
# 1 3   15
# 2 4   12
# 3 5    5
plyr::count(mtcars$gear[1:10])
#   x freq
# 1 3    4
# 2 4    6

merge(
plyr::count(mtcars$gear),
plyr::count(mtcars$gear[1:10]), 
by="x")
#   x freq.x freq.y
# 1 3     15      4
# 2 4     12      6