On Nov 8, 2009, at 9:11 AM, David Winsemius wrote:


On Nov 8, 2009, at 8:38 AM, sylvain willart wrote:

Hi everyone,

I'm struggling with a little problem for a while, and I'm wondering if
anyone could help...

I have a dataset (from retailing industry) that indicates which brands
are present in a panel of 500 stores,

store , brand
1 , B1
1 , B2
1 , B3
2 , B1
2 , B3
3 , B2
3 , B3
3 , B4

I would like to know how many brands are present in each store,

I tried:
result <- aggregate(MyData$brand , by=list(MyData$store) , nlevels)

but I got:
Group.1 x
1 , 4
2 , 4
3 , 4

which is not exactly the result I expected
I would like to get sthg like:
Group.1 x
1 , 3
2 , 2
3 , 3

Try:

result <- aggregate(MyData$brand , by=list(MyData$store) , length)

Quick, easy and generalizes to other situations. The factor levels got carried along identically, but length counts the number of elements in the list returned by tapply.

Which may not have been what you asked for as this would demonstrate. You probably wnat the second solution:
mydata2 <- rbind(MyData, MyData)
> result <- aggregate(mydata2$brand , by=list(mydata2$store) , length)
> result
  Group.1 x
1       1 6
2       2 4
3       3 6

> result <- aggregate(mydata2$brand , by=list(mydata2$store) , function(x) nlevels(factor(x)))
> result
  Group.1 x
1       1 3
2       2 2
3       3 3


Looking around, I found I can delete empty levels of factor using:
problem.factor <- problem.factor[,drop=TRUE]

If you reapply the function, factor, you get the same result. So you could have done this:

> result <- aggregate(MyData$brand , by=list(MyData$store) , function(x) nlevels(factor(x)))
> result
 Group.1 x
1       1 3
2       2 2
3       3 3



But this solution isn't handy for me as I have many stores and should
make a subset of my data for each store before dropping empty factor

I can't either counting the line for each store (N), because the same
brand can appear several times in each store (several products for the
same brand, and/or several weeks of observation)

I used to do this calculation using SAS with:
proc freq data = MyData noprint ; by store ;
tables  brand / out = result ;
run ;
(the cool thing was I got a database I can merge with MyData)

any idea for doing that in R ?

Thanks in advance,

King Regards,

Sylvain Willart,
PhD Marketing,
IAE Lille, France

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

David Winsemius, MD
Heritage Laboratories
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