我有一个矩阵(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 = 3,矩阵1 / A,包含第1至第5行,第二矩阵2 / B,包含第6至10行,最后一个矩阵3 / C包含第11至15行。
我尝试过使用拆分或切割,但我遇到了几个问题。 E.g。
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在以后的时间段内仍然存在,以便按群组计算个人的保留率。
我是否可以使用拆分和剪切命令,我需要其他人或者我的方法在R中是不可行的吗?
非常感谢你的时间和帮助。
帕特里克
PS:对不起我对矩阵的介绍。我无法弄清楚如何正确编辑它。
答案 0 :(得分:2)
您确实需要split
:
split(first.transactions.data, rep(1:3, each = 5))
(调整数字以满足您的需求,也许让他们nrow
- 依赖)