2014-09-21 2 views
1

Может ли кто-нибудь помочь мне создать столбец со средним значением лечения (tr) 1 для каждой строки каждого эксперимента (exp), касающийся разных уровней факторов (exp, tr) ?Добавить столбец с одним средним значением коэффициента уровня

ехр = коэффициент (Rep (с (1: 3), т = C (15,9,16)))

тр = фактор (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,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