Category Genes
"Tissue morphology" "AKT, TGF1B, IFNG, IgG, Igm"
"Tissue morphology" "ELOVL3, EREG, FABP5, FOXP3, glycerol, GSTO1, HDAC1"
"Tissue morphology" "AKT, FABPS, Igm"
"Cell growth" "AICDA, BID, CD200R1, CD36, CSF2"
"Cell growth" "5-hydroxytryptamine, adenosine triphosphate, AICDA"我有几个表,这些表由几行组成,它们具有相同的值("Categroy"),但在列“Genes”中有一些不同的/相同的值。我想将所有具有相同“类别”的行合并到一个行中,并保持唯一的行并删除重复。有没有更好的办法来解决这个问题?我试过“互联”和“合并”。但是,并不是很干净和容易。我一直在寻找答案,但还没有找到任何答案,所以我会非常感谢任何帮助!
Category Genes
"Tissue morphology" "AKT, TGF1B, IFNG, IgG, Igm, ELOVL3, EREG, FABPS, FABP5, FOXP3, glycerol, GSTO1, HDAC1"
"Cell growth" "5-hydroxytryptamine, adenosine triphosphate, AICDA, BID, CD200R1, CD36, CSF2" 发布于 2015-02-23 15:09:04
为此,我们可以使用data.table (其他选项包括aggregate、dplyr等)。将"data.frame“转换为"data.table”(setDT(df1)),按“类别”分组,拆分列“基因”(strsplit)、unlist、sort和粘贴(toString是paste(., collapse=", ")的包装器)
library(data.table)
DT1 <- setDT(df1)[, list(Genes=toString(sort(unique(unlist(strsplit(Genes,
', ')))))), by=Category]
DT1$Genes
#[1] "AKT, ELOVL3, EREG, FABP5, FABPS, FOXP3, glycerol, GSTO1, HDAC1, IFNG, IgG, Igm, TGF1B"
#[2] "5-hydroxytryptamine, adenosine triphosphate, AICDA, BID, CD200R1, CD36, CSF2" 也可以删除重复的元素,而不必拆分字符串,但不会按字母顺序排序。
DT2 <- setDT(df1)[, list(Genes=gsub('(\\b\\S+\\b)(?=.*\\b\\1\\b.*), ', '',
toString(Genes), perl=TRUE)), Category]
DT2$Genes
#[1] "TGF1B, IFNG, IgG, ELOVL3, EREG, FABP5, FOXP3, glycerol, GSTO1, HDAC1, AKT, FABPS, Igm"
#[2] "BID, CD200R1, CD36, CSF2, 5-hydroxytryptamine, adenosine triphosphate, AICDA" https://stackoverflow.com/questions/28676500
复制相似问题