Объедините сгруппированные столбцы с помощью dplyr для создания уникального ключа. - PullRequest
0 голосов
/ 22 февраля 2019

Я буду работать с mtcars, чтобы сделать это воспроизводимым.

Я пытаюсь создать функцию, которая позволит мне создать объединенный уникальный идентификатор (ключ) с сгруппированной переменной.Это необходимо для легкой индексации, когда я перемещаю вывод в Excel.

Вот мой сгруппированный фрейм данных.* Я добавил AdditionalVar, поскольку dplyr удалит последнюю сгруппированную переменную.

df <- mtcars %>% 
mutate(AdditionalVar = "AddVar") %>% 
group_by(cyl,gear,carb,AdditionalVar) %>% 
summarise(avgHP = mean(hp)) 


# Groups:   cyl, gear, carb [?]
     cyl  gear  carb AdditionalVar avgHP
   <dbl> <dbl> <dbl> <chr>         <dbl>
 1     4     3     1 AddVar         97  
 2     4     4     1 AddVar         72.5
 3     4     4     2 AddVar         79.5
 4     4     5     2 AddVar        102  
 5     6     3     1 AddVar        108. 
 6     6     4     4 AddVar        116. 
 7     6     5     6 AddVar        175  
 8     8     3     2 AddVar        162. 
 9     8     3     3 AddVar        180  
10     8     3     4 AddVar        228  
11     8     5     4 AddVar        264  
12     8     5     8 AddVar        335  

Моя цель - создать столбец Conc (уникальный ключ), который работает с сгруппированными переменными, как показано ниже.я не хочу конкретизировать сгруппированные переменные напрямую, поскольку это не может быть перенесено в другие приложения без изменения.

> df %>%  mutate(Conc= paste(cyl,gear,carb,sep = "`"))
# A tibble: 12 x 6
# Groups:   cyl, gear, carb [12]
     cyl  gear  carb AdditionalVar avgHP Conc 
   <dbl> <dbl> <dbl> <chr>         <dbl> <chr>
 1     4     3     1 AddVar         97   4`3`1
 2     4     4     1 AddVar         72.5 4`4`1
 3     4     4     2 AddVar         79.5 4`4`2
 4     4     5     2 AddVar        102   4`5`2
 5     6     3     1 AddVar        108.  6`3`1
 6     6     4     4 AddVar        116.  6`4`4
 7     6     5     6 AddVar        175   6`5`6
 8     8     3     2 AddVar        162.  8`3`2
 9     8     3     3 AddVar        180   8`3`3
10     8     3     4 AddVar        228   8`3`4
11     8     5     4 AddVar        264   8`5`4
12     8     5     8 AddVar        335   8`5`8

Я думаю, что ответом будет что-то подобное ниже, но это дает мнеимена столбцов как Conc вместо данных, как указано выше.

> df %>%  mutate(Conc= paste0(!!group_vars(.),collapse = "`"))
# A tibble: 12 x 6
# Groups:   cyl, gear, carb [12]
     cyl  gear  carb AdditionalVar avgHP Conc         
   <dbl> <dbl> <dbl> <chr>         <dbl> <chr>        
 1     4     3     1 AddVar         97   cyl`gear`carb
 2     4     4     1 AddVar         72.5 cyl`gear`carb
 3     4     4     2 AddVar         79.5 cyl`gear`carb
 4     4     5     2 AddVar        102   cyl`gear`carb
 5     6     3     1 AddVar        108.  cyl`gear`carb
 6     6     4     4 AddVar        116.  cyl`gear`carb
 7     6     5     6 AddVar        175   cyl`gear`carb
 8     8     3     2 AddVar        162.  cyl`gear`carb
 9     8     3     3 AddVar        180   cyl`gear`carb
10     8     3     4 AddVar        228   cyl`gear`carb
11     8     5     4 AddVar        264   cyl`gear`carb
12     8     5     8 AddVar        335   cyl`gear`carb

1 Ответ

0 голосов
/ 22 февраля 2019

Один вариант: group_map

library(dplyr)
df %>%
     group_map( ~ .x %>% 
                      mutate(Conc = paste(.y, collapse="`")))
# A tibble: 12 x 6
# Groups:   cyl, gear, carb [12]
#     cyl  gear  carb AdditionalVar avgHP Conc 
#   <dbl> <dbl> <dbl> <chr>         <dbl> <chr>
# 1     4     3     1 AddVar         97   4`3`1
# 2     4     4     1 AddVar         72.5 4`4`1
# 3     4     4     2 AddVar         79.5 4`4`2
# 4     4     5     2 AddVar        102   4`5`2
# 5     6     3     1 AddVar        108.  6`3`1
# 6     6     4     4 AddVar        116.  6`4`4
# 7     6     5     6 AddVar        175   6`5`6
# 8     8     3     2 AddVar        162.  8`3`2
# 9     8     3     3 AddVar        180   8`3`3
#10     8     3     4 AddVar        228   8`3`4
#11     8     5     4 AddVar        264   8`5`4
#12     8     5     8 AddVar        335   8`5`8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...