Bonjour,

Après un peu de recherches, je n'ai pas trouvé de réponses à mes questions.

J'ai une table assez volumineuse (1400000x230) sur laquelle je travaille, et mes data.frame tuent ma machine avant de fournir un résultat.... je cheche donc à travailler avec des data.table, et donc à "convertir mon code"

L'idée est la suivante : je recherche des mots-clefs dans ma table, et si je le rencontre, je le remplace par le nom de sa colonne.
ref = c(Actif, Active)
C1 C2 C3 C4 C5 C6 C7 C8
Active NA NA Inactif Blabla Actif NA NA
devient :
C1 C2 C3 C4 C5 C6 C7 C8
C1 NA NA Inactif Blabla C6 NA NA
Une fois les changements faits, je collapse en enlevant les "NA" et "Inactif" pour n'obtenir qu'une seule colonne :
NomQuelconque
"C1 & Blabla & C6"
Voilà mon code sur les data.frame :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
Data = fread (data.csv, blabla)
Data2 = as.data.frame (Data)
 
sfInit(parallel=T, cpus=8, type='SOCK')
 
#remplacement des termes Active/Actif par le nom de colonne
res.1 = sfLapply(1:ncol(Data2),function(x,Data2){
    vecteur = Data2[,x]
    vecteur[(!is.na(vecteur)) & (vecteur=="Active" | vecteur=="Actif")] = colnames(Data)[x]
    return(vecteur)
}, Data2=Data2)
#sur des gros volumes ma RAM (16Go) explose dans cette boucle
 
#on met le résultat sous forme de matrice
res.m = matrix(unlist(res), nrow=nrow(Data2), byrow=F)
 
#collapse
res.f = sfApply(res.m,1,function(x){
    return(paste0(x[(!is.na(x)) & (x!="Inactif") & (x!="Inactive")], collapse = " & "))
})
 
sfStop()
En espérant avoir été clair,
Merci d'avance pour votre aide/vos conseils,

Guillaume