# dplyr and calculating proportions of people who buy each year

I have data similar to the following;

I am trying to calculate the percentage of people who buy a particular brand each year. i.e. 40% of the people buy brandID 9938 each year, 2% buy brand 1283 per year etc.

I am trying dplyr - group_by and mutate but just cannot seem to calculate the proportion of people buying each brand.

PANID is a person, so this person bought 3 items of this brand in 2001.

PANID year brandID
1 1100016 2001     115
2 1100016 2001     115
3 1100016 2001     115

Any help would be great.

df <- structure(list(PANID = c(1100016L, 1100016L, 1100016L, 1100016L,
1100016L, 1100016L, 1100016L, 1100016L, 1100016L, 1100016L, 1100016L,
1100032L, 1100057L, 1100057L, 1100057L, 1100057L, 1100057L, 1100057L,
1100057L, 1100057L, 1100057L, 1100180L, 1100180L, 1100180L, 1100180L,
1100180L, 1100180L, 1100180L, 1100180L, 1100214L, 1100248L, 1100248L,
1100321L, 1100321L, 1100321L, 1100321L, 1100321L, 1100404L, 1100404L,
1100404L, 1100404L, 1100404L, 1100404L, 1100404L, 1100404L, 1100404L,
1100404L, 1100404L, 1100404L, 1100404L, 1100404L, 1100404L, 1100404L,
1100404L, 1100420L, 1100479L, 1100503L, 1100503L, 1100545L, 1100545L,
1100545L, 1100545L, 1100560L, 1100560L, 1100560L, 1100560L, 1100560L,
1100560L, 1100560L, 1100560L, 1100560L, 1100560L, 1100560L, 1100560L,
1100560L, 1100560L, 1100685L, 1100685L, 1100685L, 1100685L, 1100685L,
1100685L, 1100685L, 1100685L, 1100685L, 1100685L, 1100685L, 1100750L,
1100750L, 1100750L, 1100750L, 1100784L, 1101162L, 1101162L, 1101162L,
1101162L, 1101162L, 1101162L, 1101238L, 1101253L, 1101253L, 1101253L,
1101253L, 1101253L, 1101253L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L,
1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101279L, 1101642L,
1101642L, 1101642L, 1101642L, 1101642L, 1101642L, 1101642L, 1101642L,
1101642L, 1101642L, 1101642L, 1101642L, 1101642L, 1101642L, 1101642L,
1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L,
1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L,
1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L,
1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L, 1101758L,
1101758L, 1101758L, 1102012L, 1102012L, 1102046L, 1102046L, 1102202L,
1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L,
1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L,
1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L,
1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L,
1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L, 1102202L,
1102277L, 1102277L, 1102277L, 1102368L, 1102368L, 1102384L, 1102384L,
1102384L, 1102491L, 1102491L, 1102491L, 1102491L, 1102491L, 1102491L,
1102772L, 1102772L, 1102772L, 1102772L, 1102772L, 1102772L, 1102772L,
1102772L, 1102772L, 1102772L, 1102772L, 1102772L, 1102772L, 1102772L,
1103069L, 1103069L, 1103069L, 1103069L, 1103069L, 1103101L, 1103101L,
1103101L, 1103101L, 1103101L, 1103101L, 1103101L, 1103101L, 1103101L,
1103101L, 1103101L, 1103101L, 1103101L, 1103101L, 1103101L, 1103101L,
1103101L, 1103101L, 1103101L, 1103101L, 1103101L, 1103101L, 1103101L,
1103101L, 1103325L, 1103325L, 1103325L, 1103325L, 1103440L, 1103440L,
1103614L, 1103614L, 1103614L, 1103614L, 1103614L, 1103614L, 1103614L,
1103614L, 1103614L, 1103614L, 1103614L, 1103614L, 1103614L, 1103614L,
1103671L, 1103671L, 1103671L, 1103895L, 1103895L, 1103895L, 1103895L,
1103895L, 1103895L, 1103895L, 1103895L, 1103895L, 1103895L, 1103895L,
1103895L, 1103895L, 1103895L, 1103895L, 1103911L, 1103911L, 1104042L,
1104042L, 1104182L, 1104182L, 1104182L, 1104182L, 1104182L, 1104182L,
1104182L, 1104182L, 1104182L, 1104182L, 1104182L, 1104182L, 1104182L,
1104182L, 1104182L, 1104182L, 1104182L, 1104182L, 1104182L, 1104182L,
1104182L, 1104182L, 1104182L, 1104208L, 1104208L, 1104208L, 1104208L,
1104224L, 1104257L, 1104257L, 1104257L, 1104257L, 1104273L, 1104273L,
1104315L, 1104315L, 1104315L, 1104315L, 1104364L, 1104372L, 1104372L,
1104372L, 1104372L, 1104406L, 1104406L, 1104406L, 1104406L, 1104414L,
1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L,
1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L,
1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L,
1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L, 1104414L,
1104612L, 1104703L, 1104703L, 1104703L, 1104869L, 1104869L, 1104869L,
1104935L, 1104968L, 1104968L, 1104968L, 1104968L, 1104968L, 1104968L,
1105171L, 1105171L, 1105171L, 1105171L, 1105171L, 1105171L, 1105171L,
1105171L, 1105171L, 1105171L, 1105171L, 1105171L, 1105171L, 1105171L,
1105171L, 1105171L, 1105213L, 1105213L, 1105213L, 1105239L, 1105239L,
1105239L, 1105239L, 1105239L, 1105254L, 1105254L, 1105254L, 1105726L,
1105726L, 1105759L, 1105759L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L, 1105775L,
1105809L, 1105965L, 1105965L, 1105965L, 1105965L, 1105965L, 1105965L,
1105965L, 1105965L, 1105965L, 1105965L, 1105965L, 1105965L, 1105965L,
1105965L, 1105965L, 1105965L, 1105965L, 1105999L, 1105999L, 1105999L,
1105999L, 1105999L, 1106146L, 1106146L, 1106146L, 1106229L, 1106229L,
1106294L, 1106484L, 1106567L, 1106567L, 1106567L, 1106567L, 1106567L,
1106567L, 1106567L, 1106567L, 1106567L, 1106567L, 1106567L, 1106575L,
1106575L, 1106575L, 1106575L, 1106575L, 1106575L, 1106575L, 1106575L,
1106575L, 1106575L, 1106575L, 1106575L, 1106864L, 1107235L, 1107235L,
1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L,
1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L,
1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L,
1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L,
1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L,
1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L, 1107235L,
1107250L, 1107250L, 1107318L, 1107391L, 1107391L, 1107425L, 1107425L,
1107425L, 1107425L, 1107516L, 1107516L, 1107516L, 1107516L, 1107516L,
1107516L, 1107516L, 1107581L, 1107581L, 1107581L, 1107581L, 1107581L,
1107581L, 1107581L, 1107581L, 1107847L, 1107847L, 1107847L, 1107847L,
1107847L, 1107847L, 1107847L, 1107847L, 1107847L, 1107847L, 1107847L,
1107847L, 1107847L, 1107847L, 1107847L, 1107847L, 1107862L, 1107862L,
1107862L, 1107920L, 1107920L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L, 1107953L,
1107953L, 1107953L, 1107961L, 1107961L, 1107961L, 1107961L, 1107961L,
1107961L, 1107961L, 1107961L, 1108043L, 1108043L, 1108043L, 1108043L,
1108043L, 1108043L, 1108043L, 1108225L, 1108225L, 1108266L, 1108308L,
1108308L, 1108308L, 1108308L, 1108308L, 1108308L, 1108308L, 1108308L,
1108308L, 1108308L, 1108308L, 1108308L, 1108308L, 1108308L, 1108308L,
1108308L, 1108308L, 1108308L, 1108308L, 1108308L, 1108308L, 1108308L,
1108308L, 1108308L, 1108308L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L, 1108456L,
1108456L, 1108456L, 1108456L, 1108464L, 1108464L, 1108464L, 1108464L,
1108464L, 1108464L, 1108464L, 1108464L, 1108464L, 1108464L, 1108464L,
1108464L, 1108464L, 1108464L, 1108464L, 1108464L, 1108670L, 1108670L,
1108670L, 1108670L, 1108670L, 1108670L, 1108670L, 1108795L, 1108795L,
1108878L, 1109165L, 1109165L, 1109165L, 1109165L, 1109165L, 1109165L,
1109272L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L,
1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L,
1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L,
1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L,
1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L, 1109306L,
1109447L, 1109447L, 1109447L, 1109447L, 1109447L, 1109447L, 1109447L,
1109447L, 1109447L), year = c(2001, 2001, 2001, 2002, 2002, 2002,
2002, 2003, 2004, 2004, 2005, 2004, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2007, 2001, 2001, 2002, 2005, 2005, 2005, 2005,
2007, 2004, 2005, 2007, 2001, 2002, 2002, 2004, 2005, 2001, 2001,
2003, 2004, 2006, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
2007, 2007, 2007, 2007, 2002, 2004, 2003, 2007, 2001, 2003, 2004,
2005, 2001, 2001, 2001, 2002, 2002, 2003, 2004, 2004, 2005, 2005,
2005, 2005, 2006, 2006, 2002, 2002, 2002, 2002, 2002, 2004, 2004,
2004, 2005, 2005, 2005, 2003, 2003, 2006, 2007, 2005, 2001, 2001,
2002, 2003, 2004, 2004, 2001, 2004, 2006, 2006, 2007, 2007, 2007,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2002, 2002, 2002, 2002, 2002,
2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
2002, 2002, 2002, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2005, 2005, 2005,
2005, 2006, 2006, 2006, 2006, 2006, 2007, 2007, 2007, 2003, 2003,
2003, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 2006, 2006,
2007, 2007, 2001, 2002, 2002, 2003, 2003, 2003, 2003, 2003, 2003,
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 2005,
2005, 2005, 2005, 2005, 2006, 2006, 2006, 2007, 2007, 2007, 2001,
2003, 2001, 2002, 2002, 2002, 2002, 2002, 2003, 2003, 2003, 2003,
2004, 2004, 2004, 2004, 2005, 2005, 2005, 2005, 2005, 2005, 2005,
2005, 2005, 2005, 2006, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
2006, 2007, 2007, 2007, 2007, 2007, 2005, 2005, 2005, 2006, 2007,
2001, 2001, 2003, 2002, 2003, 2003, 2004, 2006, 2007, 2003, 2003,
2003, 2003, 2003, 2004, 2004, 2005, 2005, 2005, 2006, 2007, 2007,
2007, 2001, 2002, 2003, 2003, 2004, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2002, 2002, 2002, 2002, 2003, 2003, 2003, 2003, 2004,
2005, 2005, 2005, 2006, 2006, 2006, 2006, 2007, 2001, 2002, 2002,
2002, 2005, 2007, 2001, 2002, 2002, 2002, 2002, 2002, 2002, 2003,
2003, 2003, 2003, 2004, 2004, 2006, 2001, 2001, 2002, 2001, 2001,
2001, 2002, 2002, 2003, 2003, 2004, 2004, 2005, 2005, 2005, 2006,
2007, 2007, 2002, 2002, 2004, 2006, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2002, 2002, 2002, 2002,
2003, 2003, 2004, 2004, 2004, 2004, 2006, 2001, 2001, 2002, 2003,
2001, 2005, 2005, 2005, 2005, 2001, 2002, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2002, 2002, 2001, 2003, 2004, 2005, 2002, 2002,
2002, 2003, 2003, 2003, 2003, 2004, 2005, 2005, 2005, 2005, 2005,
2005, 2005, 2005, 2005, 2006, 2006, 2006, 2006, 2006, 2006, 2006,
2006, 2007, 2007, 2007, 2007, 2005, 2004, 2004, 2004, 2001, 2006,
2007, 2004, 2001, 2003, 2005, 2007, 2007, 2007, 2001, 2001, 2003,
2003, 2003, 2004, 2004, 2004, 2005, 2005, 2006, 2006, 2006, 2007,
2007, 2007, 2003, 2006, 2006, 2001, 2001, 2001, 2002, 2003, 2003,
2004, 2004, 2003, 2007, 2002, 2006, 2002, 2002, 2002, 2002, 2002,
2002, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2004, 2004,
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004,
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2005, 2005,
2005, 2005, 2005, 2005, 2004, 2001, 2003, 2003, 2003, 2003, 2004,
2004, 2005, 2005, 2006, 2006, 2006, 2006, 2007, 2007, 2007, 2007,
2001, 2002, 2003, 2004, 2007, 2001, 2002, 2002, 2005, 2005, 2003,
2007, 2001, 2001, 2001, 2002, 2002, 2003, 2004, 2004, 2004, 2006,
2006, 2001, 2002, 2002, 2003, 2003, 2003, 2003, 2005, 2005, 2007,
2007, 2007, 2004, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2002,
2002, 2002, 2002, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2004,
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004,
2004, 2004, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2006, 2006,
2006, 2007, 2007, 2003, 2006, 2002, 2005, 2005, 2001, 2001, 2002,
2002, 2004, 2005, 2005, 2006, 2006, 2006, 2006, 2001, 2001, 2002,
2003, 2003, 2003, 2003, 2006, 2001, 2001, 2002, 2003, 2003, 2003,
2003, 2005, 2005, 2005, 2005, 2005, 2005, 2006, 2006, 2006, 2001,
2004, 2007, 2004, 2004, 2001, 2001, 2002, 2002, 2002, 2002, 2002,
2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2004, 2004,
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004, 2004,
2005, 2005, 2005, 2005, 2005, 2005, 2006, 2006, 2006, 2006, 2006,
2006, 2006, 2006, 2007, 2007, 2007, 2007, 2007, 2004, 2004, 2004,
2004, 2005, 2005, 2005, 2006, 2001, 2002, 2002, 2002, 2003, 2003,
2005, 2001, 2006, 2003, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2002, 2003, 2004, 2004, 2004, 2004, 2005, 2005, 2006, 2006, 2006,
2006, 2007, 2007, 2007, 2007, 2007, 2007, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002,
2002, 2002, 2002, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2004, 2004,
2004, 2004, 2004, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 2005,
2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2005, 2006, 2006,
2006, 2006, 2006, 2006, 2006, 2002, 2002, 2002, 2002, 2003, 2003,
2003, 2003, 2003, 2003, 2003, 2004, 2004, 2004, 2004, 2007, 2002,
2002, 2002, 2003, 2003, 2005, 2005, 2005, 2007, 2007, 2001, 2001,
2002, 2002, 2003, 2003, 2005, 2001, 2001, 2001, 2001, 2001, 2001,
2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2001, 2002,
2002, 2002, 2002, 2002, 2002, 2002, 2002, 2002, 2003, 2003, 2003,
2003, 2004, 2004, 2004, 2004, 2006, 2001, 2001, 2001, 2002, 2002,
2002, 2002, 2002, 2002), brandID = c(115, 115, 115, 115, 115,
115, 115, 491, 73, 73, 73, 311, 433, 430, 448, 73, 73, 196, 196,
196, 432, 283, 445, 313, 315, 315, 115, 315, 315, 113, 480, 535,
72, 73, 277, 315, 288, 117, 432, 288, 491, 303, 134, 305, 305,
115, 305, 80, 175, 162, 163, 300, 46, 45, 311, 313, 73, 342,
311, 311, 311, 311, 447, 430, 445, 20, 73, 73, 445, 446, 73,
446, 72, 73, 433, 446, 480, 73, 283, 180, 480, 72, 73, 73, 180,
72, 288, 72, 72, 73, 73, 73, 115, 115, 115, 115, 115, 115, 72,
491, 277, 277, 369, 277, 277, 73, 72, 73, 72, 315, 73, 72, 315,
73, 72, 315, 73, 72, 73, 72, 73, 72, 72, 73, 72, 315, 73, 72,
72, 315, 80, 72, 73, 72, 315, 73, 72, 72, 315, 72, 72, 73, 72,
315, 73, 72, 73, 72, 73, 72, 315, 73, 72, 73, 72, 315, 73, 73,
72, 315, 315, 73, 72, 73, 72, 73, 72, 315, 73, 72, 315, 73, 72,
73, 73, 72, 72, 73, 72, 315, 73, 72, 73, 72, 73, 72, 315, 73,
72, 73, 72, 315, 73, 73, 72, 73, 72, 73, 73, 72, 72, 72, 72,
72, 72, 72, 72, 72, 72, 534, 72, 283, 72, 72, 72, 325, 283, 288,
288, 288, 288, 72, 288, 288, 288, 288, 288, 288, 283, 339, 72,
72, 363, 72, 433, 288, 288, 288, 288, 326, 288, 288, 283, 434,
288, 283, 443, 443, 423, 443, 72, 443, 72, 443, 288, 175, 288,
288, 315, 315, 73, 480, 180, 14, 515, 175, 113, 425, 175, 134,
173, 445, 423, 308, 115, 423, 308, 115, 534, 534, 113, 534, 534,
115, 534, 534, 100, 490, 118, 115, 100, 100, 149, 115, 425, 310,
115, 115, 72, 433, 360, 117, 73, 433, 444, 446, 313, 115, 73,
72, 72, 72, 73, 79, 446, 73, 73, 79, 73, 73, 491, 73, 73, 446,
73, 73, 73, 315, 425, 315, 425, 73, 73, 73, 333, 333, 333, 333,
333, 73, 73, 73, 332, 73, 73, 73, 73, 73, 73, 73, 73, 73, 73,
73, 73, 73, 162, 446, 173, 180, 514, 124, 72, 72, 72, 221, 118,
342, 72, 72, 72, 433, 17, 480, 443, 72, 80, 72, 303, 303, 433,
433, 548, 20, 433, 446, 432, 446, 446, 446, 446, 446, 446, 72,
72, 222, 73, 438, 278, 463, 438, 438, 142, 438, 339, 142, 438,
438, 142, 438, 142, 438, 438, 438, 142, 438, 438, 438, 463, 339,
448, 448, 480, 115, 79, 72, 72, 72, 72, 117, 73, 433, 436, 438,
339, 444, 115, 115, 115, 115, 115, 115, 277, 115, 14, 72, 115,
72, 118, 426, 200, 72, 73, 5, 443, 425, 491, 364, 118, 117, 434,
434, 463, 72, 269, 443, 443, 443, 463, 443, 443, 443, 443, 462,
115, 115, 115, 117, 443, 176, 180, 369, 80, 434, 113, 433, 175,
313, 315, 73, 73, 73, 73, 73, 115, 73, 315, 73, 315, 79, 277,
115, 73, 113, 277, 311, 430, 448, 444, 149, 149, 180, 221, 324,
288, 486, 480, 73, 149, 149, 443, 283, 303, 149, 116, 116, 145,
145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145,
145, 115, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 283,
145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 433, 145,
145, 145, 145, 145, 277, 277, 277, 311, 180, 73, 180, 73, 73,
73, 73, 73, 73, 433, 180, 180, 73, 180, 446, 162, 162, 115, 115,
115, 73, 72, 433, 115, 303, 115, 315, 221, 221, 444, 221, 72,
221, 315, 221, 142, 433, 115, 115, 99, 283, 325, 325, 491, 72,
491, 491, 16, 433, 60, 72, 118, 117, 118, 283, 118, 118, 118,
327, 117, 222, 117, 118, 117, 466, 277, 450, 175, 443, 288, 149,
5, 117, 118, 443, 124, 134, 117, 472, 472, 173, 73, 149, 413,
22, 492, 118, 360, 149, 386, 443, 427, 386, 413, 149, 180, 277,
425, 342, 342, 480, 529, 149, 180, 115, 315, 222, 100, 315, 222,
222, 79, 79, 79, 79, 73, 79, 79, 342, 117, 117, 117, 491, 73,
491, 288, 491, 491, 491, 73, 73, 73, 14, 490, 18, 72, 73, 73,
313, 313, 221, 221, 222, 221, 221, 480, 221, 221, 221, 221, 142,
142, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
221, 142, 142, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221,
221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 221, 73, 73,
73, 73, 73, 73, 73, 73, 283, 480, 72, 433, 72, 72, 72, 303, 369,
224, 180, 1, 20, 162, 180, 22, 1, 1, 433, 1, 1, 20, 1, 1, 1,
180, 1, 1, 315, 433, 23, 492, 23, 492, 20, 115, 115, 175, 115,
115, 73, 73, 73, 115, 175, 115, 73, 369, 73, 73, 73, 73, 73,
73, 115, 115, 115, 115, 115, 115, 303, 115, 303, 115, 115, 115,
115, 115, 115, 115, 73, 73, 115, 303, 115, 73, 73, 115, 73, 115,
303, 303, 14, 73, 115, 303, 73, 115, 303, 73, 303, 73, 303, 73,
73, 115, 303, 73, 115, 115, 303, 73, 115, 303, 73, 115, 73, 73,
115, 303, 73, 73, 115, 303, 115, 73, 73, 73, 288, 115, 303, 303,
73, 115, 303, 491, 73, 303, 73, 73, 303, 73, 73, 18, 73, 73,
115, 534, 73, 534, 73, 73, 73, 534, 73, 73, 534, 73, 73, 73,
534, 73, 534, 491, 343, 145, 145, 343, 145, 145, 208, 145, 145,
69, 145, 145, 145, 343, 487, 69, 72, 73, 72, 73, 72, 72, 72,
438, 433, 115, 369, 216, 216, 316, 72, 432, 369, 315, 315, 315,
315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315,
315, 315, 315, 315, 73, 548, 72, 283, 72, 72, 72, 117, 72, 72
)), row.names = c(NA, 1000L), class = "data.frame")

• answered 2018-10-11 20:09

This shows the percentage (# customers in year Y who bought brand B)/(# customers in year Y)

library(data.table)
setDT(df)

brands <- df[, unique(brandID)]
df2 <- df[, .(brandID = list(brandID)), .(PANID, year)]

df2[, .(brand = brands,
pct   = sapply(brands, function(x) mean(sapply(brandID, `%in%`, x = x))))
, by = year]

#      year brand  pct
#   1: 2001   115 0.12
#   2: 2001   491    0
#   3: 2001    73 0.16
#   4: 2001   311 0.02
#   5: 2001   433 0.08
#  ---
# 724: 2006   208    0
# 725: 2006    69    0
# 726: 2006   487    0
# 727: 2006   216    0

• answered 2018-10-11 21:07

This is a great use-case for the handy dplyr function n_distinct(), which counts the number of unique values in a column.

library(dplyr)
library(tidyr)

df <- data_frame(Year = c(2001, 2001, 2002, 2002, 2003, 2003, 2003),
Customer = c('Sam', 'Arjun', 'Sam', 'Sam', 'Arjun', 'Fatima', 'Leah'),
Brand = c('A', 'A', 'A', 'B', 'A', 'A', 'B'))

# For each year, get the total number of distinct customers
total_customers_in_year <- df %>%
group_by(Year) %>%
summarize(Years_Customers = n_distinct(Customer))

# Within each year, get each brand's total number of distinct customers
brand_customers_in_year <- df %>%
group_by(Year, Brand) %>%
summarize(Brand_Customers_in_Year = n_distinct(Customer)) %>%
ungroup %>%
complete(Year, Brand, fill = list(Brand_Customers_in_Year = 0L))

# Combine the year-specific summary and brand-year-specific summary
brand_customers_in_year %>%
left_join(y = total_customers_in_year,
by = 'Year') %>%
mutate(Brand_Share_in_Year = Brand_Customers_in_Year/Years_Customers)