扩展分类数据框以按组包含所有可能的对和频率
Expand a classification dataframe to include all possible pairs and frequencies by group
我有一个数据框,为了简单起见,我做了一个这样的可重现示例:
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 种事物中的一种 reference
,这意味着,每个 X1 和 X2 都可以占据 reference
中的任何值,并且分类 (classf) 将 return 受试者认为是预期参考的内容(尽管响应有一个额外的值 - Cat5-这是与未包含在参考中的不同项目的混淆)。
我想做的是创建一个新的数据框,我可以在其中扩展当前的数据框,以获得所有可能的 reference
和 Classf
对,并计算 [=] 中每个级别的次数=17=] 的每个级别 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
抱歉,如果这有点罗嗦,这是问题的简化版本。感谢任何指点。
谢谢
我们创建一个包含 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))
我有一个数据框,为了简单起见,我做了一个这样的可重现示例:
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 种事物中的一种 reference
,这意味着,每个 X1 和 X2 都可以占据 reference
中的任何值,并且分类 (classf) 将 return 受试者认为是预期参考的内容(尽管响应有一个额外的值 - Cat5-这是与未包含在参考中的不同项目的混淆)。
我想做的是创建一个新的数据框,我可以在其中扩展当前的数据框,以获得所有可能的 reference
和 Classf
对,并计算 [=] 中每个级别的次数=17=] 的每个级别 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
抱歉,如果这有点罗嗦,这是问题的简化版本。感谢任何指点。
谢谢
我们创建一个包含 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))