作者amygm307 (简单点ˇ)
看板R_Language
标题[问题] 用for回圈算zscore
时间Tue Jul 5 16:01:18 2016
- 问题: 用for回圈算z-score遇到的问题
[问题类型]
程式谘询
[软体熟悉度]:
新手(没写过程式,R 是我的第一次)
[问题叙述]:
不好意思小妹初学R又来打扰
想要把分数依照每位受试者去算z score
每位受试者有8个观察值
於是我先分别计算平均数和标准差,如下
A20是我要标准化的变项,sub是受试者编号
wtpmean=aggregate(dat$A20,by=list(dat$sub),mean)
colnames(wtpmean)=c("sub","mean")
wtpsd=aggregate(dat$A20,by=list(dat$sub),sd)
colnames(wtpsd)=c("sub","sd")
接着我想要用回圈来把分数标准化
zscore=0
for(i in 1:length(dat$A20)){
zscore=(subset(dat$A20,dat$sub==i)-wtpmean$mean[i])/wtpsd$sd[i]}
但是这里就出现问题了,我的zscore是空的,我不知道是哪里写错了
还是回圈的用法不对呢?
[环境叙述]:
R version 3.3.0 (2016-05-03)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)
locale:
[1] LC_COLLATE=Chinese (Traditional)_Taiwan.950
[2] LC_CTYPE=Chinese (Traditional)_Taiwan.950
[3] LC_MONETARY=Chinese (Traditional)_Taiwan.950
[4] LC_NUMERIC=C
[5] LC_TIME=Chinese (Traditional)_Taiwan.950
attached base packages:
[1] stats graphics grDevices utils datasets methods
[7] base
loaded via a namespace (and not attached):
[1] tools_3.3.0
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.226.166.145
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/R_Language/M.1467705681.A.E54.html
※ 编辑: amygm307 (36.226.166.145), 07/05/2016 16:08:52
2F:→ clansoda: 建议assign上面用<-这个会比较好,=有时候会出错 07/05 16:25
可以请问%>%是什麽意思吗?常看到但google搜寻不到,因为是符号吧哈
3F:推 swedrf0112: zscore[i]=... 要把数值放进去向量里记得要加[] 07/05 16:27
啊啊忘记加了,刚刚加了但跑出来的结果还是怪怪的
我原本的想法是这样→
http://pastebin.com/ysNpNyc2
4F:推 clansoda: 对分类数值做function,可以用tapply 07/05 16:31
好的我试试看!
5F:→ andrew43: dat$sub==i 这个判断式怪怪的。 07/05 16:33
是噢!我自己带入1结果是对的,但是用回圈就是不work
(subset(dat$A20,dat$sub==1)-wtpmean$mean[1])/wtpsd$sd[1]
※ 编辑: amygm307 (1.160.56.3), 07/05/2016 21:28:42
6F:→ andrew43: 如果dat$sub就1,2,3...那就没问题 07/05 22:22
7F:→ andrew43: zscore应该要设计成数组向量…实在不明白你的用意。 07/05 22:23
8F:推 swedrf0112: 你的 wtpmean$mean[1] 是ㄧ个 vector 吧? 所以每次回 07/05 22:23
9F:→ swedrf0112: 圈算出来是ㄧ个有 8 个元素的 vector? 07/05 22:23
10F:→ andrew43: 不过我也是建议你不要靠loop,用tapply吧。 07/05 22:24
11F:→ bowin: 建议可以vector operation, 运算会比loop, apply等快很多 07/06 21:16
12F:→ amygm307: 感谢各位!我後来用tapply解决了! 07/08 13:57