Re: [問題] 用for迴圈算zscore

看板R_Language作者 (小笨)時間8年前 (2016/07/06 10:00), 編輯推噓1(102)
留言3則, 2人參與, 最新討論串2/2 (看更多)
先解釋一下 %>% 這個符號,這是pipe operator 高中的時候教的函數都常都長這樣,f(x)代表f()函數對X作用接著會跑出答案 還有一種問題更複雜g(f(x)),這是包兩層的函數,也不難理解 但是如果包成十層呢?長的類似sd(mean(sum(sqrt(x)))),一眼根本很難辨識 因此magrittr這個package提供這個operator,它的作用是將左邊的object 直接作用於右邊的function,例如f(x)就能寫成x %>% f(),或者更上面的 x %>% f() %>% g(),x %>% sqrt() %>% sum() %>% mean() %>% sd() 這樣的方式更容易讓自己與別人一眼就了解你在寫什麼 建議你可以去下載swirl package來使用,這是一個互動式學習的package 置底的翻轉教室也是一樣的,只是內容是中文與內容稍有不同 英文版本的可以從github上面下載新的課程,裡面有apply、sapply、tapply 跟lapply的教學,用這個速度會比loop快很多,當然小樣本感覺不出來 但如果後面是大樣本,就是一個是喝杯水的時間,另一個是吃頓飯的時間了 接著是loop的部分,你的DATA應該是每個值都有一個對應的組別 而你想要的是該值減掉組平均除以組標準差進而對其標準化吧 在loop上面你應該先cbind一個column進去你的dataframe假設叫做zscore 首先要把mean跟sd算出來,我就不寫了 for (i in 1:nrow(dat)) {zscore[i]<-(dat$A20[i]-dat$mean[i])/dat$sd[i]} 這樣寫你才能對應自己組別的mean跟sd -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.173.98.82 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1467770422.A.B30.html

07/06 18:53, , 1F
sapply跟loop沒差那麼多QQ
07/06 18:53, 1F

07/06 18:53, , 2F
07/06 18:53, 2F

07/08 13:55, , 3F
我懂了!謝謝你的解說,我再去多看一點教學!!!
07/08 13:55, 3F
文章代碼(AID): #1NV6Osim (R_Language)
文章代碼(AID): #1NV6Osim (R_Language)