У меня есть dataframe (Annot_Subset), который выглядит следующим образом:Расщепление на основе разделителей и удаления дубликатов
IlmnID UCSC_RefGene_Group
cg00050873 Body;TSS1500
cg00212031 TSS200
cg00213748
cg00214611 1stExon;5'UTR
cg00455876
cg01707559 TSS200;TSS200;TSS200
cg02004872 1stExon;5'UTR
То, что я хотел бы сделать, это очистить последний столбец, выполнив следующие действия:
Заменить с разными строками (напр тела;. TSS1500) со строкой "Multiple_locations"
конденсироваться записи с одной строки неоднократного (например TSS200;. TSS200) Wi th, что строка появляется один раз
Добавление строки «Intergenic» в записи, которые ничего не содержат.
Для примера:
IlmID UCSC_RefGene_Group
cg00050873 Multiple_locations
cg00212031 TSS200
cg00213748 Intergenic
cg00214611 Multiple_locations
cg00455876 Intergenic
cg01707559 TSS200
cg02004872 Multiple_locations
Я написал функцию, которая будет делать это; но было интересно, был ли более элегантный и эффективный способ приблизиться к проблеме. Тем более, что у моего блока данных 485 000 строк.
Это то, что я придумал:
Gene_Group_Split<-strsplit(Annot_Subset$UCSC_RefGene_Group,";")
Clean.Gene.Group<-function(x) {
Gene_Group_Cleaned<-vector(mode="character",length=length(x))
for (i in 1:length(x)) {
if (length(x[[i]])>=1) {
unique_set<-unique(x[[i]])
if (length(unique_set)==1) {
Gene_Group_Cleaned[i]<-unique_set
} else {
Gene_Group_Cleaned[i]<-"Multiple_locations"
}
} else {
Gene_Group_Cleaned[i]<-"Intergenic"
}
}
return(Gene_Group_Cleaned)
}
Gene_Group_2<-Clean.Gene.Group(Gene_Group_Split)