如何通过对数据进行分组来制作枢轴 table

How to make a pivot table by grouping the data

这是我的数据:

ID         Day          advance           nb_event
ID1         1              NA                899
ID1         1              NA                899
ID1         1              NA                899
ID1         2             0.14               899
ID1         2              NA                899
ID1         3             0.22               899
ID1         3              NA                899
ID1         3              NA                899
ID1         2              NA                899
ID1         4             -0.96              899
ID1         4              NA                899
...
ID1         30             0.74              899
ID1         30              NA               899
ID1         30              NA               899
ID1         30              NA               899
ID2         1              NA                127
ID2         1              NA                127
ID2         2             1.54               127
...
ID2         16            0.74               127
ID3         1              NA                631
ID3         2             -0.48              631
...
ID3         35            0.25               631
...
ID80459

变量说明:

advence:每日进步;

nb_event: 每个事件的编号 ID

我想通过以下命令对 advancenb_event 进行分组:

cut.advance <- cut(advance, breaks = c(-Inf, -0.5, -0.25, -0.1, 0, 0.02, 0.05, 0.15, 0.3, 0.5, 1, Inf), right = FALSE)

cut.nb <- cut(nb_event, breaks = c(1, 500, 1000, 5000, 15000, 20000, 50000, Inf), right = FALSE)

然后,如何做一个枢轴table,根据nb_event组统计每个advance组的事件?

预期结果(在table中是相对事件天数):

                                    cut.nb
cut.advance |1-500  501-1000  1001-5000  5k-15k   15k-20k  20k-50k  more 50k
            |
More -50%   |    
-50 to -25% |
-25 to -10% |
-10 to 0%   |
Unchange    |
0 to 2%     |
2% to 5%    |   
5% to 15%   |
15% to 30%  |
30% to 50%  |
50% to 100% |
More 100%   |
rws <- levels(cut.advance)
cols <- levels(cut.nb)
new_table <- matrix(0,length(rws),length(cols))
new_table[cbind(match(cut.advance, rws), match(cut.nb, cols))] <- 1
dimnames(new_table) <- list(rws, cols)
new_table

levels 参数允许我们列出所有可能的削减。我们将 advance 削减分配给 rws 以提醒我们将它们用作我们的行,cols 用于 nb_event

我们用零创建一个新矩阵。

有趣的部分是使用 cbindmatch 将 1 分配给所有行列组合。您应该 运行 这些函数逐个查看发生了什么(即 match(cut.advance, rws))。