将行与列匹配并计算相同的出现次数 R

Sha*_*rar 3 r plyr dataframe dplyr tidyr

我有一个如下形式的数据集:-

a <- data.frame(X1=c("A", "B", "C", "A", "B", "C"),
                X2=c("B", "C", "C", "A", "A", "B"),
                X3=c("B", "E", "A", "A", "A", "B"),
                X4=c("E", "C", "A", "A", "A", "C"),
                X5=c("A", "C", "C", "A", "B", "B")
               )
Run Code Online (Sandbox Code Playgroud)

我还有另一组以下表格:-

b <- data.frame(col_1=c("ASD", "ASD", "BSD", "BSD"),
                col_2=c(1, 1, 1, 1),
                col_3=c(12, 12, 31, 21),
                col_4=("A", "B", "B", "A")
               )
Run Code Online (Sandbox Code Playgroud)

我想要做的是col_4从 set 中取出列b并在 set 中逐行匹配a,以便它告诉我哪一行在col_4新列中有多少个元素。新列的名称无关紧要。

例如:- set 中的第一行和第五行a包含col_4来自 set 的所有元素b

此外,不应发现重复项。例如。集合中的第六行a有 3"B"秒。但是由于col_4from setb只有两个"B"s,它应该告诉我 2 而不是 3。

预期输出的形式为:-

c <- data.frame(X1=c("A", "B", "C", "A", "B", "C"),
                X2=c("B", "C", "C", "A", "A", "B"),
                X3=c("B", "E", "A", "A", "A", "B"),
                X4=c("E", "C", "A", "A", "A", "C"),
                X5=c("A", "C", "C", "A", "B", "B"),
                found=c(4, 1, 2, 2, 4, 2)
               )
Run Code Online (Sandbox Code Playgroud)

Ron*_*hah 6

我们可以使用vecsets::vintersectwhich 来处理重复项。

采用apply逐行我们可以指望许多共同的价值观是如何在它们之间b$col4并且在每行a

apply(a, 1, function(x) length(vecsets::vintersect(b$col_4, x)))
#[1] 4 1 2 2 4 2
Run Code Online (Sandbox Code Playgroud)