習題 1 : 請模擬從班上隨機抽學生一萬次,看看誰與你最有緣 (抽到次數最多)想說來跑一下眾數,沒想到基本 package 沒有這個功能,冏。只好開始 google。最後大概有兩種公式,簡單整理一下。
解答:假設班上有 59 人,那麼編為 1 到 59 號,於是我們可以用下列程式,進行 1 萬次抽樣, 並繪出統計圖。
> x=sample(1:59, 10000, TRUE)
> hist(x, breaks=0.5:60)
執行結果
第一個
第二個as.numeric(names(table(x)))[table(x) == max(table(x))]
連結:來源一、來源二
第三個which.max(table(x))連結:來源一、來源二、來源三
打完收工mode_dat=NULL for(i in 1:1000){ dat=rnorm(1000) ds=density(dat) mode_dat=c(mode_dat,ds$x[which(ds$y==max(ds$y))]) }連結:來源(看不懂
借放:ANOVA
> x=c(5,5,5,2,2,2,2,2,2)
回覆刪除> which.max(table(x))
2
1
mode為2
請問下面的1是什麼
哈囉,我也一陣子沒用了,所以我只能盡量回答你看看
刪除先從整個式子來看。那個函式可以拆成兩個子式子:
which.max // 用來看數列中最大的數字
table(x) // 這邊可以用來看數列中,某數字出現的次數
按下 table(x) 後會跑出
x
2 5
6 3
代表數列中的 2 出現六次,5 出現 3 次
若將 table(x) 套回 which.max() 中
它就會選出「出現次數最大的數字」,因此就跑出了 2
而數字 2 的位置是第一個,所以第二列的回傳值就出現 1
所以回答你的問題,「1」指的是出現次數最多的數字,它在 table 中的順序是第一的意思
如果跑 which.min(table(x))
那結果應該就會是
5
2
給你參考看看 ~
您好,謝謝回答,但是我在找mode時,出現了32和5,32是mode但是就不太懂5的意思了,以下附上公式還有數據,謝謝您
刪除read.csv("Xr04-17.csv")
Q<-read.csv("Xr04-17.csv")
#求mode
which.max(table(Q$Speeds))
32
5
數據:
Speeds
28
29
29
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
30
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
31
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
32
33
33
33
33
33
33
33
33
33
33
33
33
33
34
34
34
34
34
34
34
34
34
34
34
34
34
35
35
35
35
35
35
35
35
35
35
35
35
36
36
36
36
36
37
37
37
37
37
38
38
38
39
39
41
41
先幫你把資料轉成 r 比較好吃入的形式
刪除x = c(28,29,29,rep(30,16),rep(31,19),rep(32,27),rep(33,13),rep(34,13),rep(35,12),rep(36,5),rep(37,5),rep(38,3),39,39,41,41)
先來看看 table(x) 結果長怎樣
28 29 30 31 32 33 34 35 36 37 38 39 41
1 2 16 19 27 13 13 12 5 5 3 2 2
這代表說,32 在 table 中是第五個數字,而它在數列中的出現頻率是 27 次
which.max() 會挑出最大的數值,也就是在 table 中出現次數最多(27)的那個數字(32)並列在第一列,而第二列則是他在 table 中的排序(5)
我好像把你剛剛加問的提問刪掉了?抱歉
刪除懂了,非常感謝!
刪除當有兩個眾數時,以上的方法可能跑不出正確的結果喔
回覆刪除例如
x=c(3,3,3,3,3,4,4,4,4,4,50,100)
which.max(table(x))
結果還是會出現
3
1
也就是
which.max會把第一個出現的眾數當眾數─即使後面可能有和第一個眾數有著相同次數(frequency)的眾數
喔喔喔感謝提醒!
刪除之後有處理到類似狀況的話,我會注意一下的
多個眾數,也許可以試議以下方式喔
回覆刪除x<-c(28,29,29,30,30,30,30,30,31,31,31,31,31,42,42,42)
table(x)
which(table(x)==max(table(x)))
table()輸出結果為:
x
28 29 30 31 42
1 2 5 5 3
眾數計算結果為:
30 31
3 4
有在 RStudio 測試語法了
刪除輸出結果和留言中的一樣
感謝提供建議 ~