我有一个矩阵(first.transactions.data),它有两列 id 和 date 以及 12499 行。
id date
1 19164958 2001-09-01
2 39244924 2001-11-01
3 39578413 2001-09-01
4 40992265 2001-11-01
5 43061957 2001-09-01
6 47196850 2001-11-01
7 51236987 2001-11-01
8 51326773 2001-09-01
9 54271247 2001-09-01
10 70765025 2001-09-01
11 70781923 2001-09-01
12 70782614 2001-09-01
13 70797166 2001-09-01
14 70992941 2001-09-01
15 70995813 2001-09-01
现在我想编写一个函数,可以将该矩阵划分为等长的子矩阵 n。例如,当 n = 3 时,矩阵 1/A 包含第 1 到 5 行,第二个矩阵 2/B 包含第 6 到 10 行,最后一个矩阵 3/C 包含第 11 到 15 行。
我尝试过使用 split 或 cut 但我遇到了几个问题。例如
sub <- split(first.transactions.data, cut(first.transactions.data$id, 10))
结果是:
$`(1.91e+07,2.61e+07]`
id date
1: 19164958 2001-09-01
$`(2.61e+07,3.3e+07]`
Empty data.table (0 rows) of 2 cols: id,date
$`(3.3e+07,4e+07]`
id date
1: 39244924 2001-11-01
2: 39578413 2001-09-01
$`(4e+07,4.7e+07]`
id date
1: 40992265 2001-11-01
2: 43061957 2001-09-01
或者sub <- split(first.transactions.data, sample(rep(1:29, 431)))
产量:
$`1`
id date
1: 71189663 2001-09-01
2: 71307343 2001-09-01
3: 71361917 2001-09-01
4: 71410408 2001-09-01
5: 71518508 2001-09-01
---
427: 88698009 2002-01-01
428: 88698658 2002-01-01
429: 88700541 2002-01-01
430: 88700697 2002-01-01
431: 88701106 2002-01-01
$`2`
id date
1: 71172578 2001-09-01
2: 71608016 2001-09-01
3: 71647277 2001-09-01
4: 71834223 2001-09-01
5: 71998882 2001-09-01
---
427: 88702992 2002-01-01
428: 88703276 2002-01-01
429: 88703439 2002-01-01
430: 88704952 2002-01-01
431: 88705136 2002-01-01
第一个命令不会输出同样长的部分(我认为它使用分位数而不是观察次数)。第二个命令似乎在原始矩阵的随机观察中对矩阵进行了子集化。此外,我必须指定要划分的部分以及子集的长度。最后,我不知道如何访问每个子矩阵的内容。
我想创建这些子矩阵以将它们用作群组。对于群组,我稍后想在完整的数据集中检查有多少 ID 在后期仍然存在,以按群组计算个人的保留率。
我可以为此使用命令 split 和 cut 吗,我是否需要其他命令,或者我的方法在 R 中甚至不可行?
非常感谢您的时间和帮助。
帕特里克
PS:对不起我的矩阵介绍。我不知道如何正确编辑它。