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