对于数据框中的给定组合,计算该组合在 R 中另一个数据框中出现的频率

For the given combination in a data frame, calculate the frequency of occurrence of that combination in another data frame in R

我的数据框具有如下各种组合:

    structure(list(`Q1` = c(0, 0, 0, 1, 0, 0, 0, 0, 0, 0), `Q2` = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), `Q3` = c(0, 1, 0, 0, 0, 1, 1, 0, 0, 
0), `Q4` = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), `Q5` = c(0, 0, 1, 0, 
0, 1, 0, 1, 1, 0), `Q6` = c(1, 1, 0, 1, 1, 0, 0, 1, 1, 1), `Q7` = c(0, 
0, 0, 0, 0, 0, 0, 0, 0, 0), `Q8` = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 
1), `Q9` = c(1, 0, 1, 0, 0, 1, 1, 0, 1, 0), `Q10` = c(0, 0, 0, 
0, 0, 0, 0, 0, 0, 0), `Q11` = c(0, 0, 0, 0, 1, 0, 0, 0, 0, 0), 
    `Q12` = c(1, 1, 1, 1, 1, 0, 1, 1, 0, 1)), row.names = c(NA, 
-10L), class = "data.frame")

我有一个基础数据框,其中我有不同的组合以及每个组合的权重。

structure(list(Q1 = c(0, 0, 0, 0, 0, 1, 0, 0, 0, 1), Q2 = c(0, 
1, 1, 0, 0, 0, 0, 0, 0, 0), Q3 = c(1, 0, 0, 1, 0, 0, 0, 0, 0, 
0), Q4 = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), Q5 = c(1, 0, 1, 0, 
0, 0, 1, 0, 0, 1), Q6 = c(1, 1, 1, 0, 1, 0, 0, 1, 0, 1), Q7 = c(0, 
0, 1, 1, 1, 0, 0, 0, 0, 0), Q8 = c(1, 0, 1, 0, 0, 1, 0, 0, 0, 
0), Q9 = c(1, 0, 0, 0, 0, 0, 0, 1, 1, 0), Q10 = c(0, 0, 1, 0, 
0, 1, 0, 0, 0, 0), Q11 = c(0, 0, 1, 0, 0, 1, 0, 0, 0, 0), Q12 = c(1, 
0, 0, 0, 1, 0, 1, 0, 0, 0), RatingBinary = c(1, 1, 0, 1, 0, 1, 
0, 1, 1, 1)), row.names = c(NA, 10L), class = "data.frame")

问题陈述是针对第一个数据帧中每个 1 的组合(即第一行中的 Q6、Q9、Q12,第二行中的 Q3、Q6、Q12),我需要得到满足的行数基础数据框。

例如:在组合数据框(1st Df)中,在第 1 行 Q6、Q9 和 Q12 具有二进制值 1。我需要在基础数据中获取此组合(Q6、Q9 和 Q12,其中有 1)的计数,并获取具有 RatingBinary 值 0 和 1 的行数。

如何在 R 中实现它?谁能为这种情况提出合适的解决方案?

这是一种算法方法。

我们将第一个数据框中的集合称为组合集;这是给定行中的一组三个问题。我们也将基础数据中的集合称为基础集;这是给定行中的集合,我们正试图找出给定的组合集是否属于其中的一部分。

该方法本质上是遍历每个组合集并在所有基础集上找到匹配项。集合似乎只有三个,所以我通过硬编码 sum == 3 来利用这一点,而不是进行不可知的匹配。我们将匹配存储在我称为 pair 的结构中。 1 表示匹配。我定义了 pair(x,y),其中 x 是组合数据集的行号,y 是基础数据集的行号。

pair <- matrix(nrow = 10, ncol = 10)
for(i in 1:nrow(df)) {
  ind <- which(df[i,] == 1)
  for(j in 1:nrow(df2)) {
    if(sum(df2[j, ind]) == 3){
      pair[i,j] <- 1
    } else {
      pair[i,j] <- 0
    }
  }
}

配对对象是:

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    0    0    0    0    0    0    0    0     0
 [2,]    1    0    0    0    0    0    0    0    0     0
 [3,]    1    0    0    0    0    0    0    0    0     0
 [4,]    0    0    0    0    0    0    0    0    0     0
 [5,]    0    0    0    0    0    0    0    0    0     0
 [6,]    1    0    0    0    0    0    0    0    0     0
 [7,]    1    0    0    0    0    0    0    0    0     0
 [8,]    1    0    0    0    0    0    0    0    0     0
 [9,]    1    0    0    0    0    0    0    0    0     0
[10,]    1    0    0    0    0    0    0    0    0     0

这意味着我们只在第一个组合集中找到了除基础集 4 和基础集 5 之外的所有基础集中的匹配项。因为只有一个匹配项,所以关于行数的第二个问题的答案RatingBinary 0 或 1 变得微不足道——它只是基础数据集中 row/base 集的 RatingBinary