Hi,
You may try this:
vec1<-unique(data1[,1])
res<-do.call(rbind,lapply(seq_along(vec1),function(i) 
{x1<-data1[data1[,1]%in%vec1[-i],]; x2<-mean(x1$value[x1$value>0]); x3<- 
data1[data1[,1]%in% vec1[i],]; x3$value[x3$value<0]<-x3$value[x3$value<0]+x2; 
x3}))
res1<-res[match(row.names(dat1),row.names(res)),]


A.K.




My example dataset is below. 
data1<-structure(list(Group = c("c", "c", "b", "e", "b", "b", "e", "b", 
"b", "c", "b", "c", "d", "e", "a", "c", "e", "e", "b", "c", "e", 
"a", "b", "c", "a", "d", "c", "a", "c", "d"), value = c(1.65766756554083, 
-1.00159810943707, 0.828016940090355, -0.0942360302636258, 0.110184789532348, 
0.501357929769482, -0.843610465892682, 0.112544248337201, 0.83530947271874, 
1.54896291279315, -0.668032450079063, -0.328748306664628, -0.15429551998755, 
1.58892084606551, -0.45892429914377, -2.15596722591948, 0.898111157005135, 
-0.287228845053069, -1.54706640415041, -0.780803473387221, 1.54955826561218, 
-0.506014575029359, -1.66808530086564, -0.845467401060001, 1.92688611565505, 
0.46643424929481, 0.293821259924534, 0.151536430922866, -1.62429048404794, 
0.444694790051071)), .Names = c("Group", "value"), row.names = c(NA, 
-30L), class = "data.frame") 

Here, i need to change the negative values by adding with the 
mean of the positive values.  The condition is that the mean of the 
positive values should exclude the positive values on the group on which
 this is carried out.  For example, the 'a' group negative values should
 be added with the mean from the positive values from groups 
'c","d',"e","b".  Similarly for other groups. 
Thanks.

______________________________________________
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.

Reply via email to