簡體   English   中英

使用 dplyr 連接分組列以制作唯一鍵

[英]Concatenate Grouped Columns with dplyr to make a unique key

我將與 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

一種選擇是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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM