首页 > 解决方案 > 扩展分类数据框以按组包含所有可能的对和频率

问题描述

我有一个数据框,为简单起见,我制作了一个可重复的示例,如下所示:

rex <- data.frame(X1 =c(1,1,1,1,1,1,1,1), X2 = c("A","A","A", "A", "B","B","B", "B"), Reference = c('Cat1','Cat2', 'Cat3', 'Cat4','Cat1','Cat2', 'Cat3', 'Cat4'), Classf = c('Cat1','Cat1', 'Cat3', 'Cat5', 'Cat1', 'Cat2', 'Cat3', 'Cat4'))

结果输出是这样的

  X1 X2 Reference  Classf
1  1  A      Cat1 Cat1
2  1  A      Cat2 Cat1
3  1  B      Cat3 Cat3
4  1  B      Cat4 Cat5
5  2  A      Cat1 Cat1
6  2  A      Cat2 Cat2
7  2  B      Cat3 Cat3
8  2  B      Cat4 Cat4

这是来自多类分类问题的数据,如果向受试者(在 X1:1 到 n)呈现多个类别(X2)的对象,这些对象可能是列中 4 个事物中的 1 个reference,意思是,每个 X1 和 X2 可以取中的任何值reference,分类 (classf) 将返回受试者认为是预期参考的内容(尽管响应有一个额外的值 - Cat5- 这与参考中未包含的不同项目混淆)。我想做的是创建一个新的数据框,我可以在其中扩展当前的数据框,以获得所有可能的referenceand对Classf,并计算每个级别中X1每个级别X2显示特定决策对模式的次数。如果他们没有显示特定的配对模式,那么计数应该为零,

所以像这样

  X1 X2 Reference Classf Freq
1  1  A      Cat1   Cat1    1
2  1  A      Cat1   Cat2    0
3  1  A      Cat1   Cat3    0
4  1  A      Cat1   Cat4    0
5  1  B      Cat2   Cat5    1
6  1  B      Cat2   Cat1    0
7  1  B      Cat2   Cat2    0
8  1  B      Cat2   Cat3    0

抱歉,如果这有点罗嗦,这是问题的简化版本。感谢任何指针。

谢谢

标签: rdataframematrixdata-cleaningdata-wrangling

解决方案


我们创建一个 1 的 'Freq' 列,然后按 'X1'、'X2' 进行分组,并使用complete

library(dplyr)
library(tidyr)
rex %>%
    mutate(Freq = 1) %>% 
    group_by(X1, X2) %>%
    complete(Reference, Classf, fill = list(Freq = 0))

如果我们想做一个count

rex %>% 
   count(X1, X2, Reference, Classf) %>%
   complete(X1, X2, Reference, Classf, fill = list(n = 0))

推荐阅读