One possibility is: a<-" V1 V2 F1 + 1 A 2 0 + 2 A 3 0 + 3 A 4 1 + 4 B 3 0 + 5 B 2 1 + 6 C 6 0 + 7 C 2 0 + 8 C 6 0 + "
b<-read.table(textConnection(a),header=TRUE) f<-rep(0,dim(b)[1]) f[b$F1==0] <- ave(b$V2[b$F1==0],b$V1[b$F1==0]) cbind(b,f) V1 V2 F1 f 1 A 2 0 2.500000 2 A 3 0 2.500000 3 A 4 1 0.000000 4 B 3 0 3.000000 5 B 2 1 0.000000 6 C 6 0 4.666667 7 C 2 0 4.666667 8 C 6 0 4.666667 --- [EMAIL PROTECTED] wrote: > Dear list, > > I have this dataframe > > V1 V2 F1 > 1 A 2 0 > 2 A 3 0 > 3 A 4 1 > 4 B 3 0 > 5 B 2 1 > 6 C 6 0 > 7 C 2 0 > 8 C 6 0 > > and would like to calculate a new column > with mean-values, following this rule > > 1. If F1 = 0 calculate the mean from V2 > for each factor in V1. > > 2. If F1 = 1, then F1_mean = 0 > > So, the new DF should look like this > > V1 V2 F1 F1_mean > 1 A 2 0 2.5 > 2 A 3 0 2.5 > 3 A 4 1 0.0 > 4 B 3 0 3.0 > 5 B 2 1 0.0 > 6 C 6 0 7.0 > 7 C 2 0 7.0 > 8 C 6 0 7.0 > > Thank you for any help! > > Patrick Hausmann > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, > reproducible code. > ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.