r - 扩展分类数据框以按组包含所有可能的对和频率
问题描述
我有一个数据框,为简单起见,我制作了一个可重复的示例,如下所示:
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- 这与参考中未包含的不同项目混淆)。我想做的是创建一个新的数据框,我可以在其中扩展当前的数据框,以获得所有可能的reference
and对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
抱歉,如果这有点罗嗦,这是问题的简化版本。感谢任何指针。
谢谢
解决方案
我们创建一个 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))
推荐阅读
- kotlin - 如何在 Kotlin 中实现抽象类
- c - CP/M 获取运行程序名
- ios - Cocoapods 无法与远程 Artifactory 存储库一起使用
- android - MyFragment 开始新的意图,然后如果它关闭,它意图到 MyFragment
- swift - 使 @MainActor 类或演员符合 Codable
- c# - 无法将“System.String”类型的对象转换为“System.Byte []”类型的 ASP.NET Web 应用程序
- python - 直接使用win32库捕获ROI
- python - 如何以符号方式解决python中的差分方程
- typescript - Jest 需要 10 秒来运行两个琐碎的 TypeScript 测试,我如何确定它为什么很慢?
- browser-cache - 为什么 woff 缓存在 Chrome 中不起作用?