【问题标题】:reshaping when there is no variable value in r当 r 中没有变量值时进行整形
【发布时间】:2018-10-01 08:36:35
【问题描述】:

我有一个只有两列的 data.frame。一个是barcodeid,另一个是gene

barcodeid gene
M001-M008-S137 IL12RB1
M001-M008-S137 IL7RA
M001-M008-S137 LMP1
M001-M012-S080 CRLF2
M001-M012-S080 ICOS
M001-M012-S080 IL7RA

我想最终得到这张桌子:

barcodeID geneSequence
M001-M008-S137 IL12RB1-IL7RA-LMP1
M001-M012-S080 CRLF2-ICOS-IL7RA

我在 r 中查找了 reshapedcastspreadgather,据我所知,这些不是允许我执行此操作的函数。感谢任何帮助!

【问题讨论】:

  • 谢谢弗兰克,这也很有效。我这样做纯粹是出于审美原因,因为这是人们希望看到表格中呈现的数据的方式。非常感谢!

标签: r dataframe reshape tidyr


【解决方案1】:

假设 df 是您的 data.frame,R 基本函数的组合会有所帮助:

> x <- lapply(split(df$gene, df$barcodeid), paste0, collapse="-")
> data.frame(barcodeid=names(x), geneSequence=unlist(x), row.names = NULL)
       barcodeid       geneSequence
1 M001-M008-S137 IL12RB1-IL7RA-LMP1
2 M001-M012-S080   CRLF2-ICOS-IL7RA

【讨论】:

    【解决方案2】:

    更多选择:

    reshape2::dcast(DT, barcodeid ~ ., paste, collapse="-")
    
    aggregate(. ~ barcodeid, DT, paste, collapse="-")
    

    aggregate 具有自动命名为“基因”而不是“。”的好处。在这里,虽然如果需要一个新名称,我猜它们是可以互换的,然后是......

    names(res)[2] <- "geneSequence"
    

    要恢复更改,一种方法是:

    splitstackshape::cSplit(res, "geneSequence", "-", direction = "long")
    

    更多选项请参见Split comma-separated column into separate rows

    【讨论】:

    • 如果我想再次制作我的第一张桌子,我该怎么做?如何将geneSequence分成三行,barcodeid相同,每行一个基因?
    • @HibaShaban 我以一种方式进行了编辑,以通过指向更多的链接来处理它。我不确定 tidyr 或 base R 方式是什么
    【解决方案3】:

    使用 dplyr 你可以做到:

    df %>% 
      group_by(barcodeid) %>% 
      mutate(geneSequence = paste(gene, collapse = "-")) %>%
      select(-gene) %>% 
      slice(1)
    
    
    # A tibble: 2 x 2
    # Groups:   barcodeid [2]
       barcodeid       geneSequence
          <fctr>              <chr>
    1 M001-M008-S137 IL12RB1-IL7RA-LMP1
    2 M001-M012-S080   CRLF2-ICOS-IL7RA
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-21
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      相关资源
      最近更新 更多