作者clansoda (小笨)
看板R_Language
标题Re: [问题] 用for回圈算zscore
时间Wed Jul 6 10:00:18 2016
先解释一下 %>% 这个符号,这是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://webptt.com/cn.aspx?n=bbs/R_Language/M.1467770422.A.B30.html
1F:→ celestialgod: sapply跟loop没差那麽多QQ 07/06 18:53
3F:推 amygm307: 我懂了!谢谢你的解说,我再去多看一点教学!!! 07/08 13:55