[問題] 用for迴圈算zscore

看板R_Language作者 (簡單點ˇ)時間8年前 (2016/07/05 16:01), 8年前編輯推噓4(408)
留言12則, 5人參與, 最新討論串1/2 (看更多)
- 問題: 用for迴圈算z-score遇到的問題 [問題類型] 程式諮詢 [軟體熟悉度]: 新手(沒寫過程式,R 是我的第一次) [問題敘述]: 不好意思小妹初學R又來打擾 想要把分數依照每位受試者去算z score 每位受試者有8個觀察值 於是我先分別計算平均數和標準差,如下 A20是我要標準化的變項,sub是受試者編號 wtpmean=aggregate(dat$A20,by=list(dat$sub),mean) colnames(wtpmean)=c("sub","mean") wtpsd=aggregate(dat$A20,by=list(dat$sub),sd) colnames(wtpsd)=c("sub","sd") 接著我想要用迴圈來把分數標準化 zscore=0 for(i in 1:length(dat$A20)){ zscore=(subset(dat$A20,dat$sub==i)-wtpmean$mean[i])/wtpsd$sd[i]} 但是這裡就出現問題了,我的zscore是空的,我不知道是哪裡寫錯了 還是迴圈的用法不對呢? [環境敘述]: R version 3.3.0 (2016-05-03) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 x64 (build 9200) locale: [1] LC_COLLATE=Chinese (Traditional)_Taiwan.950 [2] LC_CTYPE=Chinese (Traditional)_Taiwan.950 [3] LC_MONETARY=Chinese (Traditional)_Taiwan.950 [4] LC_NUMERIC=C [5] LC_TIME=Chinese (Traditional)_Taiwan.950 attached base packages: [1] stats graphics grDevices utils datasets methods [7] base loaded via a namespace (and not attached): [1] tools_3.3.0 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.166.145 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1467705681.A.E54.html ※ 編輯: amygm307 (36.226.166.145), 07/05/2016 16:08:52

07/05 16:25, , 1F
我不知道你是不是要這個,http://pastebin.com/QkmVmXJ5
07/05 16:25, 1F

07/05 16:25, , 2F
建議assign上面用<-這個會比較好,=有時候會出錯
07/05 16:25, 2F
可以請問%>%是什麼意思嗎?常看到但google搜尋不到,因為是符號吧哈

07/05 16:27, , 3F
zscore[i]=... 要把數值放進去向量裡記得要加[]
07/05 16:27, 3F
啊啊忘記加了,剛剛加了但跑出來的結果還是怪怪的 我原本的想法是這樣→http://pastebin.com/ysNpNyc2

07/05 16:31, , 4F
對分類數值做function,可以用tapply
07/05 16:31, 4F
好的我試試看!

07/05 16:33, , 5F
dat$sub==i 這個判斷式怪怪的。
07/05 16:33, 5F
是噢!我自己帶入1結果是對的,但是用迴圈就是不work (subset(dat$A20,dat$sub==1)-wtpmean$mean[1])/wtpsd$sd[1] ※ 編輯: amygm307 (1.160.56.3), 07/05/2016 21:28:42

07/05 22:22, , 6F
如果dat$sub就1,2,3...那就沒問題
07/05 22:22, 6F

07/05 22:23, , 7F
zscore應該要設計成數組向量…實在不明白你的用意。
07/05 22:23, 7F

07/05 22:23, , 8F
你的 wtpmean$mean[1] 是ㄧ個 vector 吧? 所以每次迴
07/05 22:23, 8F

07/05 22:23, , 9F
圈算出來是ㄧ個有 8 個元素的 vector?
07/05 22:23, 9F

07/05 22:24, , 10F
不過我也是建議你不要靠loop,用tapply吧。
07/05 22:24, 10F

07/06 21:16, , 11F
建議可以vector operation, 運算會比loop, apply等快很多
07/06 21:16, 11F

07/08 13:57, , 12F
感謝各位!我後來用tapply解決了!
07/08 13:57, 12F
文章代碼(AID): #1NUsbHvK (R_Language)
文章代碼(AID): #1NUsbHvK (R_Language)