我有一组数据,其中一个交易ID总是至少有一个来自A和B的项目。我想计算A类项目相对于B类项目列表的频率。
输入看起来像:
id = c(1,1,2,2,2,2,3,3,3,3)
cat = c("A","B","A","A","A","B","B","A","A","B")
item = c("Item 1","Item 30","Item 2","Item 3",
"Item 1","Item 30","Item 31","Item 1","Item 2","Item 32")
df = data.frame(id,cat,item)
Id Cat Item
1 A Item 1
1 B Item 30
2 A Item 2
2 A Item 3
2 A Item 1
2 B Item 30
3 B Item 31
3 A Item 1
3 A Item 2
3 B Item 32
我正在寻找的输出是
Item30 Item31 Item 32
Item1 2 1 1
Item2 1 1 1
Item3 1
我有一个解决方案,我可以遍历每个类别的唯一值,但有一个更清晰的解决方案,完全避免循环?
编辑 - 修复了缺少行的示例。为了澄清,类别{A,B}与项目属于哪个类别
有关答案 0 :(得分:3)
您似乎在做
with(merge(df[cat=='A',],df[cat=='B',],by='id',all=TRUE),
table(droplevels(item.x),droplevels(item.y)))
Item 30 Item 31 Item 32 Item 1 2 1 1 Item 2 1 1 1 Item 3 1 0 0
答案 1 :(得分:0)
我相信你正在寻找id和cat分组。
__init__.py