dplyr help
?dplyr solution: bevs %>% group_by(name, sex, drink) %>% summarise(?cost = sum(cost)) %>% select(name, drink, cost, sex) The last select statement puts the output in the column order you wanted in your result. I hope this helps. Brian
On Wed, Jul 29, 2015 at 9:37 PM, Jon BR <jonsleepy at gmail.com> wrote:
Hello,
I've recently discovered the helpful dplyr package. I'm using the
'aggregate' function as such:
bevs <- data.frame(cbind(name = c("Bill", "Mary"), drink = c("coffee",
"tea", "cocoa", "water"), cost = seq(1:8), sex = c("male","female")));
bevs$cost <- seq(1:8)
bevs
name drink cost sex 1 Bill coffee 1 male 2 Mary tea 2 female 3 Bill cocoa 3 male 4 Mary water 4 female 5 Bill coffee 5 male 6 Mary tea 6 female 7 Bill cocoa 7 male 8 Mary water 8 female
aggregate(cost ~ name + drink, data = bevs, sum)
name drink cost
1 Bill cocoa 10
2 Bill coffee 6
3 Mary tea 8
4 Mary water 12
My issue is that I would like to keep a column for 'sex', for which there
is a 1:1 mapping with 'name', such that every time 'Bill' appears, it is
always 'male'.
Does anyone know of a way to accomplish this, with or without dplyr? The
ideal command(s) would produce this:
name drink cost sex
1 Bill cocoa 10 male
2 Bill coffee 6 male
3 Mary tea 8 female
4 Mary water 12 female
I would be thankful for any suggestion!
Thanks,
Jonathan
[[alternative HTML version deleted]]
______________________________________________ R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see 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.