我有一個資料框看起來像這樣
path:hsa00010 cpd:C00022
path:hsa00010 cpd:C00024
path:hsa00010 cpd:C00031
path:hsa00010 cpd:C00033
path:hsa00010 cpd:C00036
path:hsa00010 cpd:C00068
path:hsa00010 cpd:C00074
path:hsa00010 cpd:C00084
path:hsa00010 cpd:C00103
path:hsa00010 cpd:C00111
path:hsa00020 cpd:C00022
path:hsa00020 cpd:C00024
path:hsa00020 cpd:C00031
path:hsa00020 cpd:C00033
path:hsa00020 cpd:C00036
path:hsa00020 cpd:C00068
path:hsa00020 cpd:C00074
path:hsa00020 cpd:C00084
path:hsa00020 cpd:C00103
path:hsa00020 cpd:C00111
我想使用第二列作為行名并獲得這樣的資料框
cpd:C00022 path:hsa00010 path:hsa00020
cpd:C00024 path:hsa00010 path:hsa00020
...
有人可以提供任何想法嗎?謝謝!
uj5u.com熱心網友回復:
你想要這樣的東西,使用dplyr::group_by()anddplyr::summarize()嗎?一旦你有了這個,你當然可以把cpd...列變成行名,如果你真的需要它作為行名。
library(dplyr)
library(tidyr)
df <- tibble::tribble(
~x, ~y,
"path:hsa00010", "cpd:C00022",
"path:hsa00010", "cpd:C00024",
"path:hsa00010", "cpd:C00031",
"path:hsa00010", "cpd:C00033",
"path:hsa00010", "cpd:C00036",
"path:hsa00010", "cpd:C00068",
"path:hsa00010", "cpd:C00074",
"path:hsa00010", "cpd:C00084",
"path:hsa00010", "cpd:C00103",
"path:hsa00010", "cpd:C00111",
"path:hsa00020", "cpd:C00022",
"path:hsa00020", "cpd:C00024",
"path:hsa00020", "cpd:C00031",
"path:hsa00020", "cpd:C00033",
"path:hsa00020", "cpd:C00036",
"path:hsa00020", "cpd:C00068",
"path:hsa00020", "cpd:C00074",
"path:hsa00020", "cpd:C00084",
"path:hsa00020", "cpd:C00103",
"path:hsa00020", "cpd:C00111"
)
df %>%
group_by(y) %>%
summarise(x = list(x)) %>%
ungroup() %>%
unnest_wider(x, names_sep = "_")
#> # A tibble: 10 x 3
#> y x_1 x_2
#> <chr> <chr> <chr>
#> 1 cpd:C00022 path:hsa00010 path:hsa00020
#> 2 cpd:C00024 path:hsa00010 path:hsa00020
#> 3 cpd:C00031 path:hsa00010 path:hsa00020
#> 4 cpd:C00033 path:hsa00010 path:hsa00020
#> 5 cpd:C00036 path:hsa00010 path:hsa00020
#> 6 cpd:C00068 path:hsa00010 path:hsa00020
#> 7 cpd:C00074 path:hsa00010 path:hsa00020
#> 8 cpd:C00084 path:hsa00010 path:hsa00020
#> 9 cpd:C00103 path:hsa00010 path:hsa00020
#> 10 cpd:C00111 path:hsa00010 path:hsa00020
由reprex 包( v2.0.0 )于 2021 年 12 月 21 日創建
uj5u.com熱心網友回復:
我們可能正在尋找pivot_wider這里。
library(tidyr)
library(dplyr)
library(stringr)
df %>% pivot_wider(values_from = path,
values_fn = \(x) str_remove_all(x, 'path:'),
names_from = path,
names_glue = 'path_{1:length(unique(path))}'
)%>%
mutate(cpd = str_remove_all(cpd, "^cpd:"))
# A tibble: 10 × 3
cpd path_1 path_2
<chr> <chr> <chr>
1 C00022 hsa00010 hsa00020
2 C00024 hsa00010 hsa00020
3 C00031 hsa00010 hsa00020
4 C00033 hsa00010 hsa00020
5 C00036 hsa00010 hsa00020
6 C00068 hsa00010 hsa00020
7 C00074 hsa00010 hsa00020
8 C00084 hsa00010 hsa00020
9 C00103 hsa00010 hsa00020
10 C00111 hsa00010 hsa00020
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/389593.html
標籤:r
下一篇:洗掉R中的單引號
