【问题标题】:R separate into multiple columns, transpose and concatenateR分成多列,转置和连接
【发布时间】:2020-06-08 10:07:39
【问题描述】:

我有一个如下所示的数据框:

Pos HG00096 HG00097 HG00099 ......and so on(about 2000 variables)
230765867 0|0 0|0 0|1 ......
230765926 1|0 0|1 0|0 ......
230765941 0|0 1|1 0|0 .......

等等大约4000个观察结果

mydfexample <- tribble(
  ~Pos,~HG00096,~HG00097,~HG00099,
  "230765867","0|0","0|0","0|1",
  "230765926","1|0","0|1","0|0",
  "230765941","0|0","1|1","0|0",
  )

我的目标是将每一列分成两列 (sep = "|") 并将它们连接为每一列的一个字符串,如下所示。

HG00096.1 010.....
HG000096.2 000.....
HG00097.1 001....
HG00097.2 011......
HG00099 .1 000......
HG00099.2 100.......

到目前为止,我能够将它们分开并将其放入两个单独的列中(感谢 SO)。以下是代码:

f= function(x){
  mydfexample %>% 
    dplyr::select(Pos,x) %>%
    separate(x, paste0(x,c(".1",".2")))
}

names(mydfexample[2:4]) %>% 
  map(f) %>%
  reduce(left_join, by="Pos")

接下来,我的想法是做一个转置,联合起来得到最终的信息。我试图关注How to transpose a dataframe in tidyverse?,但这会改变最终数据框中列的顺序。我想保持0和1的顺序。现在它按位置排序,并希望保持相同的顺序。非常感谢任何指针或帮助。

【问题讨论】:

    标签: r dplyr tidyr


    【解决方案1】:

    我们将pivot_longerseparate 转换为“长”格式,分成两列

    library(dplyr)
    library(tidyr)
    mydfexample %>% 
        pivot_longer(cols = -Pos) %>% 
        separate(value, into = c('value1', 'value2'))
    

    基于预期的输出显示

    library(stringr)
    mydfexample %>% 
             pivot_longer(cols = -Pos)  %>%
              separate(value, into = c('value1', 'value2')) %>% 
              group_by(name) %>% 
              summarise_at(vars(starts_with('value')), str_c, collapse="") %>%
              pivot_longer(cols = -name, names_to = "Name") %>% 
              select(-Name) %>% 
              mutate(name = make.unique(name))
    # A tibble: 6 x 2
    #  name      value
    #  <chr>     <chr>
    #1 HG00096   010  
    #2 HG00096.1 000  
    #3 HG00097   001  
    #4 HG00097.1 011  
    #5 HG00099   000  
    #6 HG00099.1 100  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多