对于数据帧中的给定组合,计算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(中,在第一行Q6、Q9&Q12具有二进制值CCD_ 1。我需要在基础数据中获得这个组合的计数(Q6、Q9和Q12,它们有1(,并获得具有RatingBinary值0和1的行数

如何在R中实现此功能?有人能为这种情况提出合适的解决方案吗?

这里有一个算法方法。

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

这种方法本质上是遍历每个组合集,并在所有基集上找到匹配项。集合似乎只有三个,所以我通过硬编码sum == 3而不是进行不可知的匹配来利用这一点。我们将匹配项存储在一个我称之为pair的结构中。匹配由CCD_ 5指示。我定义了对(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的行数的第二个问题的答案变得微不足道——它只是基本数据集中该行/基本集的RatingBinary

最新更新