Data.frame manipulation
Hi r-help-bounces at r-project.org napsal dne 28.01.2010 17:40:01:
Thank you, Dennis and Petr. One more question: when aggregating to one es per id, how would I go
about
keeping the other variables in the data.frame (e.g., keeping the value
for
the first row of the other variables, such as mod2) e.g.: # Dennis provided this example (notice how mod2 is removed from the
output):
with(x, aggregate(list(es = es), by = list(id = id, mod1 = mod1),
mean))
id mod1 es 1 3 1 0.20 2 1 2 0.30 3 2 4 0.15 # How can I get this output (taking the first row of the other variable
in
the data.frame):
If I remember it correctly in my suggestion I used something like aggregate(x[,-columns.mod1 and mod2], by = x[, columns.mod1 and mod2, mean) Which shall use mod2 as aggregating variable. Does it result in output you wanted? Regards Petr
id es mod1 mod2 1 .30 2 wai 2 .15 4 other 3 .20 1 itas Thank you, AC On Thu, Jan 28, 2010 at 1:29 AM, Petr PIKAL <petr.pikal at precheza.cz>
wrote:
HI r-help-bounces at r-project.org napsal dne 28.01.2010 04:35:29:
Hi All, I'm conducting a meta-analysis and have taken a data.frame with
multiple
rows per study (for each effect size) and performed a weighted average of
effect
size for each study. This results in a reduced # of rows. I am particularly interested in simply reducing the additional variables in the data.frame to the
first row
of the
corresponding id variable. For example:
id<-c(1,2,2,3,3,3)
es<-c(.3,.1,.3,.1,.2,.3)
mod1<-c(2,4,4,1,1,1)
mod2<-c("wai","other","calpas","wai","itas","other")
data<-as.data.frame(cbind(id,es,mod1,mod2))
Do not use cbind. Its output is a matrix and in this case character matrix. Resulting data frame will consist from factors as you can
check by
str(data) data<-data.frame(id=id,es=es,mod1=mod1,mod2=mod2)
data id es mod1 mod2 1 1 0.3 2 wai 2 2 0.1 4 other 3 2 0.2 4 calpas 4 3 0.1 1 itas 5 3 0.2 1 wai 6 3 0.3 1 wai # I would like to reduce the entire data.frame like this:
E.g. aggregate aggregate(data[, -(3:4)], data[,3:4], mean) mod1 mod2 id es 1 4 calpas 2 0.3 2 1 itas 3 0.2 3 1 other 3 0.3 4 4 other 2 0.1 5 1 wai 3 0.1 6 2 wai 1 0.3 doBy or tapply or ddply from plyr library or .... Regards Petr
id es mod1 mod2 1 .30 2 wai 2 .15 4 other 3 .20 1 itas # If possible, I would also like the option of this (collapsing on
id
and
mod2): id es mod1 mod2 1 .30 2 wai 2 0.1 4 other 2 0.2 4 calpas 3 0.1 1 itas 3 0.25 1 wai Any help is much appreciated! AC Del Re
[[alternative HTML version deleted]]
______________________________________________ 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.
[[alternative HTML version deleted]]
______________________________________________ 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.