2014-11-24 96 views
1

假設我有以下矩陣如何R中使用表矩陣找到最大計數

m = matrix(c(1, 0, 0, 0, 0, 0, 1, 1, 0), ncol = 3) 
    > m 
     [,1] [,2] [,3] 
    [1,] 1 0 1 
    [2,] 0 0 1 
    [3,] 0 0 0 

我想爲每一個列的值的計數,所以

table(m[,1]) 
    table(m[,2]) 
    table(m[,3]) 

我想知道具有最多計數的值(0或1)是多少(顯示多於另一個)。所以對於第1列,我想R將返回0(因爲有更多的0比1),列2,R應該返回0,併爲列3返回1.

我試過which.max()但那隻能給我指數。不是計數最大的值。

+0

是的,但是如何找到每個表中計數最大的值? – Adrian 2014-11-24 01:20:05

+1

lapply(lapply(split(m,col(m)),table),function(x)names(which.max(x)))'或'apply(m,2,function(x)names(which。 max(table(x))))' – Jota 2014-11-24 01:24:25

回答

2

如果您使用的是二進制矩陣的工作,你可以使用colMeans

as.numeric(colMeans(m) > 0.5) 
# [1] 0 0 1 

因爲colMeans(m)給你1周的每列

+0

'colMeans'相當於這個答案的第一部分。 – thelatemail 2014-11-24 01:47:26

+0

啊,是的!我總是忘記這個功能存在 – 2014-11-24 01:48:36

1

一個簡單的解決方案是使用指數化和which.max百分比,正如你所建議的那樣。爲了使事情更簡單,可以使用apply和函數索引which.max來完成因此,遵循您的示例矩陣:

apply(m,2,function (X) as.numeric(names(table(X)[which.max(table(X))])))