看板 R_Language 關於我們 聯絡資訊
先解釋一下 %>% 這個符號,這是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
celestialgod: sapply跟loop沒差那麼多QQ 07/06 18:53
celestialgod: 請參考#1LjDrSmd (R_Language) 07/06 18:53
amygm307: 我懂了!謝謝你的解說,我再去多看一點教學!!! 07/08 13:55