【问题标题】:Category Overlap Analysis类别重叠分析
【发布时间】:2015-08-24 17:51:17
【问题描述】:

我正在尝试执行一些类别重叠分析,需要帮助。

我有由客户服务票组成的数据。门票标有类别数据。工单可以包含多个类别标签。

我有一个查询可以提取票证 ID 和类别。对于具有多个类别的 ID,我得到了多行。我正在寻找一种显示类别重叠的方法,例如:有多少张票有类别 A、有 A 和 B、B 和 C 等。

我希望能够在 Excel 或 R 中执行此操作,以便可以轻松地将其合并到我的管理报告中。

我的查询输出示例如下:

category  ticket_id

A   3975472 
D   3975472 
B   3975472 
P   3969484 
B   3969484 
S   3969484 
P   3968360 
C   3968360 
D   3964048 
A   3964048 
C   3963748 
E   3963748

谢谢!

我希望实现如下输出:

【问题讨论】:

  • 您希望在哪里重叠?在工作表中?作为代码中的变量?还有,一共有多少个类别?
  • 我想象了一个工作表,它可以为我提供每个类别组合的 id 计数。我想象工作表在第一行有类别,然后在第一列下有交叉点的 id 数。实际上有大约 400 个类别。
  • 哇! 400个类别?那么这些中的每一个都将被组合为一个列标题来进行计数?那是 400^2 组合。 Excel 在工作表中只有 16384 列。可能我理解错了。
  • 如果您只想每行单独列出每个类别,那么已经提供的数据透视表答案是否不够?
  • 我在我的问题中添加了一个带有我想要的输出的屏幕截图。对于我无法描述所需的输出,我深表歉意。

标签: r excel


【解决方案1】:

Excel 中,您可以使用数据透视表执行此操作:

R 中,假设数据位于名为df 的数据框中,您可以执行以下操作:

table(df$ticket_id, df$category)
#         A B C D E P S
# 3963748 0 0 1 0 1 0 0
# 3964048 1 0 0 1 0 0 0
# 3968360 0 0 1 0 0 1 0
# 3969484 0 1 0 0 0 1 1
# 3975472 1 1 0 1 0 0 0

【讨论】:

  • 对于 R,addmarginszero.print 可用于模仿 excel 输出:print(addmargins(table(df$ticket_id, df$category)),zero.print="")
【解决方案2】:

这是一个有趣的问题。希望下面的代码提供解决方案。我正在使用库 reshape2 进行一些数据重新排列。

set.seed(1)
# creating a sample dataset
dat <- data.frame(category = sample(x = letters[1:6], size = 1000,replace = T), ticket = sample(x = 1000:1500, size = 1000,replace = T))
dat <- unique(dat)
dat <- dat[order(dat$ticket, dat$category),]
head(dat)

    category ticket
311        a   1000
916        c   1000
978        d   1000
949        f   1000
72         f   1001
597        c   1002

library(reshape2)

#same as table function but gives a data frame
tab <- dcast(dat,ticket ~ category, length)  

#create all possible 2-way combinations
levels <- sort(unique(dat$category))
combs <- data.frame(rows = rep(levels,times = length(levels)), cols = rep(levels,each = length(levels)))

#calculate count for each combination
combs$count <- apply(combs,1,function(x) sum(tab[,x[1]] & tab[,x[2]]))

overlap <- dcast(combs, rows ~ cols) #convert output into a square matrix

  rows   a   b   c   d   e   f
1    a 140  38  36  41  36  42
2    b  38 128  48  32  41  39
3    c  36  48 161  35  49  36
4    d  41  32  35 123  32  35
5    e  36  41  49  32 139  38
6    f  42  39  36  35  38 138

如果需要进一步解释,请告诉我。

【讨论】:

    猜你喜欢
    • 2020-07-11
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 2014-03-09
    • 2012-02-24
    • 1970-01-01
    相关资源
    最近更新 更多