我正在使用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。我不知道字符串重复了多少次
答案 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),]