1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| library(tidyverse)
remplacer_manquant <- function(list_genotype){
df_diff <- data.frame()
# initialisation :
count <- 0 # sert plus tard pour connaitre le % d'avancement du calcul.
debut <- Sys.time() # timer pour connaitre la durée totale du calcul.
for i in list_genotype{
# initialisation :
genotype_consensus <- NULL # Genotype consensus pour un numéro de clone unique (1 ligne)-
list_genotype_consensus <- NULL # liste des listes des genotypes consensus (x lignes)
# liste des individus pour ce numéro de clone i :
list_individus <- df %>% filter(clone_id == i) %>% slice()
for row in 1:nrow(list_individus){
individu <- list_individus %>% slice(row)
print(individu)
text_individu <- list_individus[row,]
# Initialisation
nb_NA <- sum(is.na(individu))
if (nb_NA>60){ # ncol(individu)*80/100
for col in 3:ncol(df){ # nb : '3' car les deux premières colonnes de dff ne sont pas des alleles
table <- as.data.frame(table(df[,col][which(df$clone_id==i)])) #création d'un tableau de correspondance, qui nous donne l'occurence des différents allele pour un snp donné.
max_allele <- max(table$Freq) # on extrait le nombre de fois ou l'allele le plus représenté apparait dans la colonne.
allele_majoritaire <- as.character(t$Var1[which(table$Freq==max_allele)]) # on extrait les charactères alphabétiques de l'allele
if (max_allele>=3){ # si l'allele apparait au moins 3 fois
# on remplace les NAs par l'allele majoritaire
df[,col][is.na(df[,col])] <- allele_majoritaire
#création d'un génotype consensus pour chaque numéro de clone
genotype_consensus <- append(genotype_consensus, allele_majoritaire)
# print(genotype_consensus)
}else{
# message(c(message = 'le numéro de clone ',i, message =' n a pas assez de SNPs identiques pour compléter les NAs'))
genotype_consensus <- append(genotype_consensus, NA)
}
}
}else{
message(c(message = 'l individu ', text_individu, message = ' a trop de NA. Les NA n ont pas été complétées'))
}
}
list_genotype_consensus <- rbind(as.list(list_genotype_consensus),as.list(genotype_consensus))
# Progression du temps de calcul :
count <- count + 1
x <- round((100*count)/length(list_genotype),0)
message(c(x), message = "%")
}
# Temps écoulé :
fin <- Sys.time()
Time_elapsed <- fin-debut
print(Time_elapsed)
#afficher résultats
}
# lancer la fonction :
resultat <- remplacer_manquant(unique(df$clone_id)) |
Partager