Re: [程式] R矩陣計算問題
※ 引述《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
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
07/14 01:19, 5F
討論串 (同標題文章)