我有一个只有两列的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中查找了reshape
,dcast
,spread
,gather
,据我所知,这些功能不允许我使用做这个。感谢任何帮助!
答案 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")