uu = function(u){ u = unique(u) if (length(u)==2){ "III" } else{if (u==1) "II" else "I"} }
p = tapply(d$prepost, d$doc, FUN=uu) d$cl = p[as.character(d$doc)] # OR d$cl = tapply(d$prepost, d$doc, FUN=uu)[as.character(d$doc)]
# if missing values d = data.frame(doc = c(1,2,1,3,2,2,3,3,4,6,5,5), prepost= c(0,0,1,1,1,NA,0,0,1,NA,,0,1))
p = with(subset(d, subset=!is.na(prepost)), tapply(prepost, doc, FUN=uu)) d$cl = p[as.character(d$doc)]