Re: [程式] R矩陣計算問題

看板Statistics作者 (仙道群)時間15年前 (2010/07/11 17:30), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《gsuper (統計的巴比倫塔)》之銘言: : ※ 引述《Ares0628 (SHOW HAND)》之銘言: : : [軟體程式類別]: : : R : : [程式問題]: : : 資料處理 : : [軟體熟悉度]: : : 新手(不到1個月) : : [問題敘述]: : : 一. X=c('abc23','abc2254','abk2225','abc1414','abc1414') : : 要如何讓他照字母數字排序成 abc23 abc1414 abc1414 abc2225 abk2254 : : 用sort排列只會一個一個字元比較 as.vector(unlist(tapply(X,nchar(X),sort))) [1] "abc23" "abc1414" "abc1414" "abc2254" "abk2225" 這應該分成四行來寫 首先用 nchhar 算出 X 的字母數 用 tapply 去按字母數排列 用 unlist 改 tapply 的結果 (去除list) 用 as.vector 改為資料數列 X1 <- nchar (X) X2 <- tapply(X,X1,sort) X3 <- unlist(X2) X4 <- as.vector(X3) 自己試試看吧 : : 二.我想利用A矩陣 另外生成矩陣B : : 比較第一行資料名字若相同 則合併成一列計算 (這邊用sum為例子) : : A=data.frame(matrix(0,5,4)) : : A[,1]=c('abc23','abc23','abc25','abc25','abc28') : : A[,2]=c(20,60,40,90,20) : : A[,3]=c(3,5,1,9,2) : : A[,4]=c(600,800,100,500,200) : : A : : X1 X2 X3 X4 : : 1 abc23 20 3 600 : : 2 abc23 60 5 800 : : 3 abc25 40 1 100 : : 4 abc25 90 9 500 : : 5 abc28 20 2 200 : : B : : X1 X2 X3 X4 : : 1 abc23 80 8 1400 : : 2 abc25 130 10 600 : : 3 abc28 20 2 200 : A <- A[order(A[,1]) , ] : B <- cbind( unique(A[,1]) , tapply(A[,2],A[,1],sum), : + tapply(A[,3],A[,1],sum) , tapply(A[,4],A[,1],sum) : 為了解這個問題 , 我之前花了一個禮拜 (弱) : (P.S. 矩陣裡面不能有 Missing value 或 NA) : 另一種寫法是用 tapply 找到 index : 再用 index 叫出特定 matrix : 再用 rowSums() : 不過我懶的寫了.... 一般來說用data.frame的格式會比較簡單 以下是一行 data.frame(X1 = names(tapply(A$X2,A$X1,sum)), X2 = tapply(A$X2,A$X1,sum), X3 =tapply(A$X3,A$X1,sum), X4=tapply(A$X4,A$X1,sum),row.names=NULL) X1 X2 X3 X4 1 abc23 80 8 1400 2 abc25 130 10 600 3 abc28 20 2 200 這樣就算有漏缺等的話,只要用na的選項在tapply裡面調整就好 (因功能而異) 例如 tapply(A$X4,A$X1,sum,na.rm=TRUE) : : 三.初學R遇到問題都不曉得該用那些函數 有哪些函數可以用 即使HELP也不知道該查什麼 : : 請問一下遇到問題的時候 要怎樣知道我該去找哪個函數來用??或是有什麼技巧嗎 : 如果是要找特定統計功能 : google " XXXX method with R" : 如果是跟 Coding 有關的 : 我也很苦惱找不到好的書.... coding 和 function 很靠感覺 我剛學的時候還寫了一個跟tapply的一樣的function用了快要兩年 然後有一天我發現,原來根本有tapply這個功能 我覺得最好的方法就是去上課 有系統性的學個一學期或是一年,會差滿多的 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 24.11.170.17

07/11 17:44, , 1F
我覺得最重要的就是平常多學 function , 要用的時後才快
07/11 17:44, 1F

07/11 17:54, , 2F
謝謝 我在練習看看
07/11 17:54, 2F
※ 編輯: sandows 來自: 24.11.170.17 (07/11 19:04)

07/11 22:27, , 3F
超強
07/11 22:27, 3F

07/14 01:19, , 4F
什麼都不知道該怎麼用的話 就用指標+迴圈 不過比較累
07/14 01:19, 4F

07/14 01:19, , 5F
爾且R的迴圈 跑好慢 = = 不過小量運算應該ok啦
07/14 01:19, 5F
文章代碼(AID): #1CEOykHm (Statistics)
文章代碼(AID): #1CEOykHm (Statistics)