這個問題在這里已經有了答案: 在列中拆分分隔字串并作為新行插入 [重復] 6 個答案 6 小時前關閉。
我有一個看起來像這樣的資料框:
| 變數1 | 變數2 | 變數3 |
|---|---|---|
| 組_A | a,b,c,d,e | 1 |
| 組_B | f,g | 2 |
| 組_C | 你好 | 3 |
| Hyper_group_A | 組_A,組_B | 4 |
| 組_D | j,k | 5 |
| 組_E | 升,米 | 6 |
| 組_F | 不 | 7 |
| Hyper_group_B | Hyper_group_A,p | 8 |
我想將列 var2 中的元素取消組合并看起來像這樣:
| 變數1 | 變數2 | 變數3 |
|---|---|---|
| 組_A | 一個 | 1 |
| 組_A | b | 1 |
| 組_A | C | 1 |
| 組_A | d | 1 |
| 組_A | e | 1 |
| 組_B | F | 2 |
| 組_B | G | 2 |
| …… | ... | ... |
| …… | ... | ... |
| …… | ... | ... |
| Hyper_group_B | Hyper_group_A | 8 |
| Hyper_group_B | p | 8 |
我如何在 R 中使用 dplyr 做到這一點?
var1 = c("Group_A","Group_B","Group_C","Hyper_group_A",
"Group_D","Group_E","Group_F","Hyper_group_B")
var2 = c(c("a,b,c,d,e"),c("f,g"),c("h,i"),c("Group_A,Group_B"),
c("j,k"),c("l,m"),c("n,o"),
c("Hyper_group_A,p"))
var3 = seq(1,8,1)
data = tibble(var1,var2,var3);data
uj5u.com熱心網友回復:
這個怎么樣:
library(dplyr)
library(tidyr)
library(stringr)
var1 = c("Group_A","Group_B","Group_C","Hyper_group_A",
"Group_D","Group_E","Group_F","Hyper_group_B")
var2 = c(c("a,b,c,d,e"),c("f,g"),c("h,i"),c("Group_A,Group_B"),
c("j,k"),c("l,m"),c("n,o"),
c("Hyper_group_A,p"))
var3 = seq(1,8,1)
data = tibble(var1,var2,var3)
data %>%
rowwise() %>%
mutate(var2 = list(c(str_split(var2, ",", simplify=TRUE)))) %>%
unnest(var2) %>%
arrange(var1, var2)
#> # A tibble: 19 × 3
#> var1 var2 var3
#> <chr> <chr> <dbl>
#> 1 Group_A a 1
#> 2 Group_A b 1
#> 3 Group_A c 1
#> 4 Group_A d 1
#> 5 Group_A e 1
#> 6 Group_B f 2
#> 7 Group_B g 2
#> 8 Group_C h 3
#> 9 Group_C i 3
#> 10 Group_D j 5
#> 11 Group_D k 5
#> 12 Group_E l 6
#> 13 Group_E m 6
#> 14 Group_F n 7
#> 15 Group_F o 7
#> 16 Hyper_group_A Group_A 4
#> 17 Hyper_group_A Group_B 4
#> 18 Hyper_group_B Hyper_group_A 8
#> 19 Hyper_group_B p 8
由reprex 包(v2.0.1)于 2022 年 10 月 19 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/518244.html
標籤:r数据框dplyr
