添加具有一个级别因子平均值的列

时间:2014-09-21 03:56:38

标签: r mean

对于不同的因子水平(exp,tr),有人可以帮助我为每个实验(exp)的每一行创建一个治疗平均值(tr)1的列吗?

  

exp = factor(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 个答案:

答案 0 :(得分:1)

首先使用平均值创建数据框:

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

然后是一个允许为每个级别的objet添加处理值的函数:

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)

这就是全部..