r

时间:2018-04-20 15:15:13

标签: r dataframe reshape tidyr

我有一个只有两列的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,据我所知,这些功能不允许我使用做这个。感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

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

{{1}}

答案 1 :(得分:1)

使用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

答案 2 :(得分:1)

更多选择:

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

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

aggregate具有自动命名功能,因为&#34;基因&#34;而不是&#34;。&#34;在这里,虽然如果需要一个新名字,我猜他们可以互换,然后是......

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

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

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

有关更多选项,请参阅Split comma-separated column into separate rows