从单列计算项目频率

时间:2016-02-08 15:26:27

标签: r

我有一组数据,其中一个交易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}与项目属于哪个类别

有关

2 个答案:

答案 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