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

作者: clansoda (小笨)   2016-07-06 10:00:18
先解釋一下 %>% 這個符號,這是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
作者: celestialgod (天)   2016-07-06 18:53:00
sapply跟loop沒差那麼多QQ請參考#1LjDrSmd (R_Language)
作者: amygm307 (簡單點ˇ)   2016-07-08 13:55:00
我懂了!謝謝你的解說,我再去多看一點教學!!!

Links booklink

Contact Us: admin [ a t ] ucptt.com