按字符串分组

时间:2017-06-14 21:31:50

标签: r dataframe subset

我正在使用data.frame:在我有探针名称的行上,在一个colunm中,我有一些关于探针在基因中的区域的iformation(1stExon,Body等),但我有一个问题:

                  Gene          Gene_Region
cg14736058 PROM1;PROM1;PROM1  TSS200;5'UTR;1stExon
      .            .          1stExon;1stExon;1stExon;1stExon
      .            .          1stExon;1stExon;1stExon
      .            .          1stExon;1stExon;1stExon
      .            .          1stExon;1stExon;5'UTR;5'UTR;5'UTR;1stExon
      .            .          1stExon;1stExon
      .            .          1stExon;1stExon;Body
      .            .          Body;Body

我想要只存在一个区域的行,但是imanige想象" 1sExon"是重复,但只是我想要那一行。例如,我想要最后一行,因为" Body"是唯一重复的区域,所以我认为它只是一个区域。我不知道我是否在清楚自己。 PS。我不知道字符串重复了多少次

1 个答案:

答案 0 :(得分:2)

这应该可以解决问题。首先将字符串折叠为仅包含唯一值。如果只有一个唯一值,则分隔符;将消失。因此,您只需删除仍包含;的行。

# Load Data
df <- structure(list(Gene_Region = c("TSS1500;5'UTR", "TSS1500;TSS1500;TSS1500;TSS1500", "Body", "1stExon;5'UTR", "1stExon;1stExon;1stExon", "Body", "Body;Body;Body;Body;Body" ), UCSC_RefGene_Name = c("USP44;USP44", "COL11A2;COL11A2;COL11A2;COL11A2", "SOX2OT", "CRYGD;CRYGD", "ENPP2;ENPP2;ENPP2", "PGLYRP2", "KCNQ2;KCNQ2;KCNQ2;KCNQ2;KCNQ2" )), .Names = c("Gene_Region", "UCSC_RefGene_Name"), row.names = c("cg13879483", "cg08481075", "cg13294849", "cg22399133", "cg02534163", "cg16206460", "cg13782274"), class = "data.frame")

# Collapse
df$unique_regions <- sapply(strsplit(df$Gene_Region ,";"), function(x) 
  paste(unique(x), collapse=";"))

# Search for rows with no semicolon in unique_regions column
df2 <- df[- grep(";", df$unique_regions),]