2017-08-01 53 views
1

一個大的數據幀我有一個表中的R,我需要在R.高效對於R中

構建(計數)的經驗轉移矩陣

的數據看起來像這樣建立轉換矩陣:

ExplicitRoll    ExplicitRoll_EOM 
No Change      No Change 
No Change      1-> 3 
No Change      No Change 
NoChangeMonthOfPayoff  NoChangeMonthOfPayoff 
No Change      Entry 
NoChangeMonthOfPayoff  NoChangeMonthOfPayoff 
No Change      No Change 
.... 

該表格非常大,並且有許多類型的其他列表項(例如1->3,charged off等)。第一列表示第t個月,第二列表示t-1。

有沒有辦法非常有效地發現從一個狀態到下一個狀態有多少轉換?作爲參考,整個數據集是18M行。

謝謝!

+0

爲什麼你的專欄是相同的,但你聲稱一個是另一個的滯後? – Sotos

+0

他們不是爲了。這只是一個隨機抽樣的列。大多數行的狀態沒有變化。我修改了2行來幫助說明。謝謝你指出。 – user1357015

回答

2

table()創建這樣一個關聯矩陣。您可以使用as.data.frame.matrix將其轉換爲數據框。例如:

df = data.frame(Col1 = c("A","B","C","D","A","B","E"),Col2 = c("B","C","D","B","B","E","A")) 
as.data.frame.matrix(table(dt)) 

    A B C D E 
A 0 2 0 0 0 
B 0 0 1 0 1 
C 0 0 0 1 0 
D 0 1 0 0 0 
E 1 0 0 0 0 

1800萬行:的0.5171118秒

df = data.frame(Col1 = sample(letters,18000000,replace = T),sample(letters,18000000,replace = T)) 

a = Sys.time() 
as.data.frame.matrix(table(df)) 
Sys.time()-a 

時間差。希望這可以幫助!

+0

我不知道桌子會處理18M行... – user1357015

+0

我認爲它可以,看到我添加的示例。 – Florian

+0

深信!謝謝! – user1357015