2013-02-26 73 views
1

我有一個表,看起來像這樣:如何在矩陣中查找最大值?

 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 
    586 0 0 0 1 0 0 0 1 3 1 0 1 0 0 0 0 0 1 0 2 0 3 0 0 0 4 0 1 2 0 
    637 0 0 0 0 0 0 2 3 2 2 0 4 0 0 0 0 1 0 0 2 0 1 1 1 0 0 0 0 0 1 
    989 0 0 1 0 0 0 2 1 0 0 0 2 1 0 0 1 2 1 0 3 0 2 0 1 1 0 1 0 1 0 
    1081 0 0 0 1 0 0 1 0 1 1 0 0 2 0 0 0 0 0 0 3 0 5 0 0 2 1 0 1 1 1 
    2922 0 1 1 1 0 0 0 2 1 0 0 0 2 0 0 0 1 1 0 1 0 3 1 1 2 0 0 1 0 1 
    3032 0 1 0 0 0 0 0 3 0 0 1 0 2 1 0 1 0 1 1 0 0 3 1 1 1 1 0 0 1 1 

數字1至30的第一行是我的標籤,並且列是我的項目。我想爲每件商品找到最重要的商標。例如。 586有4個計數26,這是該行中最高的數字,所以對於586,我想分配26.

我能夠獲得max(table1 [1,])的最大值)),它使我獲得了第一行的最大值,但沒有得到它對應的標籤,但我不知道如何繼續。所有幫助表示讚賞!

dput:

structure(c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 0L, 
0L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 2L, 1L, 0L, 0L, 1L, 3L, 1L, 
0L, 2L, 3L, 3L, 2L, 0L, 1L, 1L, 0L, 1L, 2L, 0L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 1L, 1L, 4L, 2L, 0L, 0L, 0L, 0L, 0L, 1L, 2L, 2L, 
2L, 0L, 0L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 
0L, 0L, 1L, 0L, 1L, 2L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 
0L, 0L, 0L, 0L, 1L, 2L, 2L, 3L, 3L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 
0L, 3L, 1L, 2L, 5L, 3L, 3L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 1L, 
0L, 1L, 1L, 0L, 0L, 1L, 2L, 2L, 1L, 4L, 0L, 0L, 1L, 0L, 1L, 0L, 
0L, 1L, 0L, 0L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 2L, 0L, 1L, 1L, 0L, 
1L, 0L, 1L, 0L, 1L, 1L, 1L), .Dim = c(6L, 30L), .Dimnames = structure(list(
    c("586", "637", "989", "1081", "2922", "3032"), c("1", "2", 
    "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", 
    "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", 
    "24", "25", "26", "27", "28", "29", "30")), .Names = c("", 
""))) 
+0

您正在尋找的輸出的期望結構是什麼? – A5C1D2H2I1M1N2O1R2T1 2013-02-26 17:02:44

回答

5

也許你正在尋找which.max。假設你的矩陣稱爲「溫度」:

> apply(temp, 1, which.max) 
586 637 989 1081 2922 3032 
    26 12 20 22 22 8 

applyMARGIN = 1(第二個參數)將行應用功能。

+0

準確!謝謝,我會在幾分鐘內接受你的回答! – midde 2013-02-26 17:04:16

+0

擊敗我50秒,我刪除了我的答案:D + 1! – 2013-02-26 17:04:34

+1

@Jilber,對不起!只是試圖讓我的配額在我稱之爲夜之前;) – A5C1D2H2I1M1N2O1R2T1 2013-02-26 17:05:35

8

max.col會爲您提供與每行最大值對應的列號向量。

> max.col(df, tie='first') 
[1] 26 12 20 22 22 8 

您可以使用該向量來獲取每一行的列名稱。

> colnames(df)[max.col(df, tie='first')] 
[1] "26" "12" "20" "22" "22" "8" 
+0

+1 for max.col;在 – RyanGrannell 2013-02-26 17:05:55

+1

之前,我從來沒有遇到過這種功能,有時只是在R控制檯上輸入你想要做的事情(在這種情況下是最大的),並按下標籤幫助;) – 2013-02-26 17:06:56

+1

同樣在這裏。首先我看過'max.col' ... +1 – A5C1D2H2I1M1N2O1R2T1 2013-02-26 17:07:09

相關問題