[英]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.