2013-10-28 38 views
1

我有一個包含兩列id和date和12499行的矩陣(first.transactions.data)。R:將矩陣等分拆分,保留繼承並保存部分

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至5的矩陣1/A,包含行6至10的第二矩陣2/B和包含行11至15的最後一個矩陣3/C.

我試過使用分裂或削減,但我遇到了幾個問題。例如。

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:對不起,我對矩陣的介紹。對不起,我對矩陣的介紹很抱歉。我無法弄清楚如何正確編輯它。

回答

1

你確實需要split

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

(調整數,以滿足您的需求,也許讓他們nrow依賴性)

+0

有沒有辦法利用完整的數據集? – Patrik

+0

@Patrik不知道這意味着什麼 - 利用它如何? – eddi

+0

使用所有的數據,而不是刪除一些行來接收對應於除數的足夠長的子集。請記住,我希望有一個功能,可以指定任意數量的羣組,而不僅僅是特定的數字。 3. – Patrik