Dmitri:

as.matrix makes a matrix out of the dataframe that is passed to it.

As a further note I attempted and failed for reasons that are unclear to me to construct a formula that would (I hoped) preserve the column names which are being mangle in the posted effort:

form <- as.formula(paste(
                     "cbind(",
                      paste( myvars, collapse=","),
                      ") ~ group+mydate",
                      sep=" ") )
> myvars<-c("value1","value2")
> example.agg1<-aggregate(formula=form,data=example, FUN=sum)
Error in m[[2L]][[2L]] : object of type 'symbol' is not subsettable
> traceback()
2: aggregate.formula(formula = form, data = example, FUN = sum)
1: aggregate(formula = form, data = example, FUN = sum)

> form
cbind(value1, value2) ~ group + mydate
> parse(text=form)
expression(~
cbind(value1, value2), group + mydate)

So it seems to be correctly dispatched to aggregate.formula but not passing some check or another. Also tried with formula() rather than as.formula with identical error message. Also tried including without naming the argument.

--
David


On Jul 14, 2011, at 3:32 PM, Dimitri Liakhovitski wrote:

Thank you, David, it does work.
Could you please explain why? What exactly does changing it to "as matrix" do?
Thank you!
Dimitri

On Thu, Jul 14, 2011 at 3:25 PM, David Winsemius <dwinsem...@comcast.net > wrote:

On Jul 14, 2011, at 3:05 PM, Dimitri Liakhovitski wrote:

Hello!

I am aggregating using a formula in aggregate - of the type:
aggregate(cbind(var1,var2,var3)~factor1+factor2,sum,data=mydata)

However, I actually have an object (vector of my variables to be
aggregated):
myvars<-c("var1","var2","var3")

I'd like my aggregate formula (its "cbind" part) to be able to use my
"myvars" object. Is it possible?
Thanks for your help!


Not sure I have gotten all the way there, but this does work:

example.agg1<-aggregate(as.matrix(example[myvars])~group +mydate,sum,data=example)

example.agg1
  group     mydate example[myvars]    NA
1 group1 2008-12-01               4   4.2
2 group2 2008-12-01               6   6.2
3 group1 2009-01-01              40  40.2
4 group2 2009-01-01              60  60.2
5 group1 2009-02-01             400 400.2
6 group2 2009-02-01             600 600.2

Dimitri

Reproducible example:

mydate = rep(seq(as.Date("2008-12-01"), length = 3, by = "month"),4)
value1=c(1,10,100,2,20,200,3,30,300,4,40,400)
value2 =c(1.1,10.1,100.1,2.1,20.1,200.1,3.1,30.1,300.1,4.1,40.1,400.1)

example<-data.frame(mydate=mydate,value1=value1,value2=value2)

example$group<-c(rep("group1",3),rep("group2",3),rep("group1", 3),rep("group2",3))
example$group<-as.factor(example$group)
(example);str(example)


example.agg1<-aggregate(cbind(value1,value2)~group +mydate,sum,data=example)
# this works
(example.agg1)

### Building my object (vector of 2 names - in reality, many more):
myvars<-c("value1","value2")
example.agg1<-aggregate(cbind(myvars)~group+mydate,sum,data=example)
### does not work


--
Dimitri Liakhovitski
Ninah Consulting
www.ninah.com

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

David Winsemius, MD
West Hartford, CT





--
Dimitri Liakhovitski
Ninah Consulting
www.ninah.com

David Winsemius, MD
West Hartford, CT

______________________________________________
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