2015-04-05 89 views
2

兩個分類的比例予有諸如數據矩陣(MYDATA的):獲得在矩陣

 L SCORE 
[1,] "nL" 1     
[2,] "nL" 4     
[3,] "L" 4     
[4,] "L" 4     
[5,] "nL" 3     
[6,] "nL" 9 
... 
... 

等。

我希望得到關於分數的「L」和「nL」個案。目標輸出將如下所示:

 SCORE LCount nLCount 
[1,] 1  0  1 
[2,] 4  2  1 
[3,] 3  0  1    
[4,] 9  0  1 
... 

我該如何實現這一目標?我嘗試使用表(myData),但這不會產生所需的結果(我得到一個計數基於分數,但沒有分離爲「L」和「nL」)。 我感覺我在這裏錯過了一些相當微不足道的東西。 如何獲得「L」和「nL」的計數? 目前,myData是一個(相當大的)矩陣,並且由於內存問題,如果可能的話,我想避免將其轉換。

+0

非常好問題! – 2015-04-05 08:39:17

回答

2

好的,找到答案,畢竟它是table()。 簡單使用:

table(myData[,1], myData[,2]) 

viola。

-Ruslan

+0

只是'table(myData)'將在這種情況下。 – 2015-04-05 08:44:48

+0

只是表格返回類似於:[1 3 4 9 L nL] [1 1 3 1 2 4] – Ruslan 2015-04-05 12:51:40

1

您還可以使用data.table(記得矩陣是一個類型,這樣你的初始矩陣僅僅是全字符):

library(data.table) 
library(reshape2) 

dcast(setDT(as.data.frame(m))[,.(count=.N),.(SCORE, L)], SCORE~L, value.var='count') 
# SCORE L nL 
#1  1 NA 1 
#2  3 NA 1 
#3  4 2 1 
#4  9 NA 1 

數據

m=structure(c("nL", "nL", "L", "L", "nL", "nL", "1", "4", "4", 
"4", "3", "9"), .Dim = c(6L, 2L), .Dimnames = list(NULL, c("L", 
"SCORE"))) 
+0

謝謝,我會牢記以備將來參考 – Ruslan 2015-04-05 10:42:27

+0

(現在我更喜歡不需要更改的解決方案數據類型,因爲在這種情況下數據類型很大) – Ruslan 2015-04-05 10:50:24

+1

哈,我永遠不會強迫某人使用我的解決方案!桌子在那裏更加優雅! – 2015-04-05 10:58:34