簡體   English   中英

將值與 R 中的行名匹配

[英]match values to the rowname in R

我有一個 dataframe 看起來像這樣

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

我想使用第二列作為行名並像這樣獲得 dataframe

cpd:C00022 path:hsa00010 path:hsa00020
cpd:C00024 path:hsa00010 path:hsa00020
...

有人可以給出任何想法嗎? 謝謝!

你想要這樣的東西,使用dplyr::group_by()dplyr::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

代表 package (v2.0.0) 於 2021 年 12 月 21 日創建

我們可能在這里尋找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

暫無
暫無

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

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