[R] tapply, mean and subset
Moshe Olshansky
m_olshansky at yahoo.com
Thu Nov 22 04:15:27 CET 2007
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
--- c18g at uni-bremen.de 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 at 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.
>
More information about the R-help
mailing list