看板 R_Language 關於我們 聯絡資訊
※ 引述《po5113 (π)》之銘言: : [問題類型]: : : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : [軟體熟悉度]: : 新手(沒寫過程式,R 是我的第一次) : [問題敘述]: : 想找出row裡面的最大值並挑出該值的colnames : 資料與前幾篇matrix找最大值的column name類似 : 部分資料如下: : [,1] [,2] [,3] : [1,] 3.490245e-11 8.579553e-05 9.999142e-01 : [2,] 3.020358e-11 7.424585e-05 9.999258e-01 : [3,] 7.690743e-12 1.890628e-05 9.999811e-01 : [4,] 8.779051e-10 2.153561e-03 9.978464e-01 : [5,] 6.732860e-20 1.655181e-13 1.000000e+00 : [6,] 9.544444e-15 2.346370e-08 1.000000e+00 : [7,] 4.519803e-13 1.111130e-06 9.999989e-01 : ... : ... : 不過目的在找出各row中最大值所在的column name : 因此output中會有跟row number一樣的個數 : 有想過用apply加上colnames : 但似乎是遇到了點瓶頸 : 想請問在處理各列單行內的資料時 : 是否有適合使用的函數或其他寫法呢? : 感謝各位提供寶貴的意見! : : [關鍵字]: : row, max, column names 根據我的測試,十萬列,apply都還很快,0.57秒而已XD numCols <- 1e2 numRows <- 1e5 mat <- matrix(rnorm(numCols*numRows), numRows, dimnames = list(NULL, paste0(sample(LETTERS, numCols, TRUE), 1:numCols))) st <- proc.time() loc_max <- apply(mat, 1, which.max) out <- colnames(mat)[loc_max] proc.time() - st # user system elapsed # 0.53 0.04 0.57 如果覺得太慢,需要加速什麼的可以試試看matrixStats: library(matrixStats) st <- proc.time() loc_max <- rowOrderStats(mat, which = 1) out2 <- colnames(mat)[loc_max] proc.time() - st # user system elapsed # 0.12 0.00 0.12 all.equal(out, out2) # TRUE 只要原本的20%時間 -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/j3ql84c data.table #1LhW7Tvj (R_Language) http://tinyurl.com/hr77hrn dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/jtg4hau dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/jq3o2g3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.76.63.212 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1466080833.A.F5D.html ※ 編輯: celestialgod (211.76.63.212), 06/16/2016 21:02:53
po5113: 自己沒想到這樣寫就可以了...QQ 06/16 22:28
po5113: 還有很多不熟悉的地方,感謝!! 06/16 22:28