2014-09-21 72 views
1

有人可以帮助我创建一个列,每个实验(exp)的每一行的处理平均值(tr)为1,关于不同水平的因子(exp,tr) ?添加具有一个水平因子平均值的列

EXP =因子(REP(C(1:3)中,t = C(15,9,16)))

TR =因子(C(1,1,1,1,1 ,2,2,2,2,2,3,3,3,3,3, 1,1,1,2,2,2,3,3,3, 1,1,1,1,2 ,2,2,2,3,3,3,3,4,4,4,4))

val = c(2,5,7,4,8,9,4,6,8, NA,10,4,5,6, 2,5,7,1,8,9,4,6,8,NA,8,4,5,6, 5,1,4,8,9, 4,6,8,NA,3,4,5)

dat < -data.frame(exp,tr,val)

看起来应该是这样......

exp tr val mean_tr1 
1 1 2 5.2 
1 1 5 5.2 
1 1 7 5.2 
1 1 4 5.2 
1 1 8 5.2 
1 2 9 5.2 
1 2 4 5.2 
1 2 6 5.2 
1 2 8 5.2 
1 2 NA 5.2 
1 3 10 5.2 
1 3 4 5.2 
1 3 5 5.2 
1 3 6 5.2 
1 3 2 5.2 
2 1 5 4.3 
2 1 7 4.3 
2 1 1 4.3 
2 2 8 4.3 
2 2 9 4.3 
2 2 4 4.3 
2 3 6 4.3 
2 3 8 4.3 
2 3 NA 4.3 
3 1 8 5.8 
3 1 4 5.8 
3 1 5 5.8 
3 1 6 5.8 
3 2 5 5.8 
3 2 1 5.8 
3 2 4 5.8 
3 2 8 5.8 
3 3 9 5.8 
3 3 4 5.8 
3 3 6 5.8 
3 3 8 5.8 
3 4 NA 5.8 
3 4 3 5.8 
3 4 4 5.8 
3 4 5 5.8 

回答

1

首先创建与平均值的数据帧:

tr1_mean <- aggregate(val ~ exp + tr, data = dat, mean) 

然后一个功能,允许添加的治疗价值,每objetcs的水平:

nrows_exp <- lapply(unique(dat$exp), function(x){ sum(dat$exp==x) }) 

a <- c() 
for(i in 1:length(nrows_exp)) {a <- c(a,nrows_exp[[i]])} 

dat$t1_mean <- rep(tr1_mean[1:length(levels(exp)),3], times=a) 

这就是全部..

+0

你能详细解释一下这里发生了什么吗?谢谢! – DanM7 2014-09-23 02:05:16