Суммирование данных на основе нескольких столбцов - PullRequest
1 голос
/ 01 октября 2019

У меня возникли проблемы с выяснением этого. Скажем, у меня есть такая таблица:

    Name Activity Day
1   John    cycle   1
2   John     work   1
3   Tina     work   1
4 Monika     work   1
5   Tina     swim   1
6   Tina  jogging   2
7   John     work   2
8   Tina     work   2

Я хочу обобщить ее так, чтобы активность каждого человека была сгруппирована по дням.

Это должно выглядеть так:

    Name      Activity Day
1   John    cycle;work   1
2   Tina     work;swim   1
3 Monika          work   1
4   Tina  jogging;work   2
5   John          work   2

Я думаю, что пакет dplyr будет ответом здесь, но я не знаю, как это сделать. Любая помощь?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 01 октября 2019

Вы можете использовать функцию aggregate, например:

> aggregate(dat$Activity,list(dat$Name,dat$Day),as.character)
  Group.1 Group.2             x
1    John       1   cycle, work
2  Monika       1          work
3    Tina       1    work, swim
4    John       2          work
5    Tina       2 jogging, work
0 голосов
/ 01 октября 2019

Опция с data.table

library(data.table)
setDT(dat)[, .(Activity = toString(Activity)), .(Name, Day)]
0 голосов
/ 01 октября 2019

попробуй:

library(dplyr)

dat <- tribble(~"Name", ~"Activity", ~"Day",
   "John",    "cycle",   1,
   "John",     "work" ,  1,
   "Tina",     "work",   1,
 "Monika",    "work",   1,
   "Tina",     "swim",   1,
   "Tina",  "jogging",   2,
   "John",     "work",   2,
   "Tina",     "work",  2)

dat %>% 
  group_by(Name, Day) %>% 
  summarise(activity = paste(Activity, collapse = "; "))

# A tibble: 5 x 3
# Groups:   Name [3]
  Name     Day activity     
  <chr>  <dbl> <chr>        
1 John       1 cycle; work  
2 John       2 work         
3 Monika     1 work         
4 Tina       1 work; swim   
5 Tina       2 jogging; work

...