2010-08-04 61 views
3

感谢您的阅读。我经常发现我需要对我的数据进行切片,然后绑定输出。我通常为此目的建立一个循环,但我确信我做错了,而在R中,我应该用不同的思维方式。你能帮我学习一个更好的方法来做到这一点吗?R - 如何将环路变为R中的功能

与感谢,

亚当

rm(m); m=0; # this variable will hold the output of the loop 
    for (nobs in as.numeric(levels(factor(s1$obs)))) { # go over observer index 
     for (nses in as.numeric(levels(factor(subset(s1, obs==nobs)$session)))) { # go over session index 
      ns1=subset(s1, obs== nobs & session==nses & ky %in% c(1,2)); # the data slice of interest 
      ds=round(clfdMc (ns1),2); cs=round(cfdMc (ns1),2); # apply function to data slice 
      rw=cbind(nobs,nses,ds[2,3],ds[3,3],ds[2,3]-ds[3,3], cs[1,3],cs[2,3],nobs+nses/10, ds[2,4],ds[3,4],cs[1,4],cs[2,4]) # create a row from function output 
      m=rbind(m,rw); #print(paste('obs:',nobs,' nses:',nses,'clear d:',ds[2,3],'red d',ds[3,3]))# bind new row to previous rows 
     } 
    } 

m=data.frame(m[2:dim(m)[1],]) # create a data frame from these results 
names(m)=c('obs','ses','D_clear','D_red','diffD','D_cg-1','D_cg+1','mark','C_clear','C_red','C_cg-1','C_cg+1') # give names to column variables 
+1

对于初学者来说,在代码中添加一些空白符,以便大家可以阅读它!缩进块,换行等等,谢谢! – Harlan 2010-08-04 17:17:51

+0

我为此道歉。我是新来的。 – 2010-08-04 18:32:26

回答

6

plyr包建专门对付这样的数据处理问题。检查出一些网页上的文档:http://had.co.nz/plyr/

我完全不明白你使用的round()语法,但我相信等效plyr通话将

library(plyr) 
ddply(s1, .(obs, session), transform, ds = round(clfdMc, 2), cs = round(cfdMc, 2)) 

我不正是肯定这会做你想做的。你的代码有点不透明。

+0

像魔术一样!感谢您花时间帮助我。这是一个很好的方向。我恰好在看到您的消息之前下载了plyr软件包10。 – 2010-08-04 18:22:21