Цитата(jeruzale @ 10.07.2012 - 12:56)

Добрый день!
Пишу вам от безысходности - уже 2 недели ищу ответ на мою проблему, но пока не нашел ответа.
Пытался писать сложными формулами в R , но ничего не получилось...
Не могли бы вы помочь?
Я загрузил доц файл, где объяснил свою проблему визуально.
Заранее всем спасибо!
это делает например пакет plyr
например вот такой страхолюдной формулой в своих данных я намедни извлекал ранг абитуриента в его школе
Код
data.baza<-ddply(data,
.(data$Код.УО),
function(i) data.frame(i,
ResPhys.UOrank=rank(max(i$ResPhys.ball, na.rm=TRUE)-i$ResPhys.ball,
ties.method ="min"),
UO.number=nrow(i)))
у Вас ситуация проще
Код
> ddply(table, .(table$ID.worker,table$Year), function(i) colMeans(i))
table$ID.worker table$Year ID.worker Year Systolic.blood.pressure
1 468 1968 468 1968 123.0
2 468 1970 468 1970 120.0
3 500 1985 500 1985 121.5
4 500 1990 500 1990 124.0
5 555 1980 555 1980 125.0
Diastolic.blood.pressure
1 88.0
2 80.0
3 83.5
4 87.0
5 85.0
ps даже проще можно ddply(table, .(table$ID.worker,table$Year), colMeans)
pps или вот так
Код
> ddply(table, .(table$ID.worker,table$Year), function(i) colMeans(i[,3:4]))
table$ID.worker table$Year Systolic.blood.pressure Diastolic.blood.pressure
1 468 1968 123.0 88.0
2 468 1970 120.0 80.0
3 500 1985 121.5 83.5
4 500 1990 124.0 87.0
5 555 1980 125.0 85.0
> aggregate(table[,3:4], list(table$ID.worker,table$Year), mean)
Group.1 Group.2 Systolic.blood.pressure Diastolic.blood.pressure
1 468 1968 123.0 88.0
2 468 1970 120.0 80.0
3 555 1980 125.0 85.0
4 500 1985 121.5 83.5
5 500 1990 124.0 87.0