1

我有一个矩阵(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:对不起我的矩阵介绍。我不知道如何正确编辑它。

4

1 回答 1

2

你确实需要split

split(first.transactions.data, rep(1:3, each = 5))

(调整数字以满足您的需求,也许使它们nrow依赖)

于 2013-10-28T19:37:03.087 回答