data.table créer summary stat pour plusieurs colonnes

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Melissa Lepage
Messages : 107
Enregistré le : 19 Avr 2010, 07:13

data.table créer summary stat pour plusieurs colonnes

Messagepar Melissa Lepage » 08 Aoû 2017, 13:49

Bonjour,

Depuis la conférence useR2017, je me suis mise (non sans difficulté) au package data.table. J'ai donc pleins de questions sans réponse (même si j'ai trouvé des alternatives, je souhaiterais que mon code soit le plus efficace possible pour profiter au maximum de la puissance du package data.table.

Une de mes questions concerne le calcul de moyenne et de N sur plusieurs colonnes, que je fait grace à lapply, .SD et .SDcols comme ci dessous:

Code : Tout sélectionner

avgtemp<-dt[,lapply(.SD,mean,na.rm=TRUE),.SDcols=c(15:20)]
# calcul moyenne pour mes colonnes 15 à 20 de dt, comme il y a des NA, je rajoute l'option na.rm=TRUE
Ntemp<-dt[,lapply(.SD,function(x)length(x[!is.na(x)])),.SDcols=c(15:20)]
 #même logique mais cette fois c'est le count (sans NA) que je veux obtenir.

Je voudrais faire ces deux lignes de codes en une seule, car au final ce que je veux, c'est obtenir si possible un data.table avec 5 lignes et deux colonnes, une pour la moyenne et une pour le N.
Donc pour l'instant ce que je fais (code loin d'être optimal, qui peut être simplifié) est :

Code : Tout sélectionner

dt1<-data.frame(att=names(avgtemp),avg=t(avgtemp),N=t(Ntemp))
dt1b<-as.data.table(dt1)


Des conseils à me donner?
Merci d'avance,
Salutations,
Mélissa

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: data.table créer summary stat pour plusieurs colonnes

Messagepar Logez Maxime » 08 Aoû 2017, 13:57

Bonjour,

Code : Tout sélectionner

fun <- function(u) c(mean = mean(u, na.rm = T), N = sum(!is.na(u)))
dt[, sapply(.SD, fun), .SDcols = 15:20]
# ou
transpose(dt[, lapply(.SD, fun), .SDcols = 15:20])
Après tu peux transposer le résultat avec des fonctions autres que celles de la librairie data.table, mais je ne connais pas suffisamment cette librairie pour savoir si tu peux le faire directement.
Cordialement,
Maxime

Melissa Lepage
Messages : 107
Enregistré le : 19 Avr 2010, 07:13

Re: data.table créer summary stat pour plusieurs colonnes

Messagepar Melissa Lepage » 08 Aoû 2017, 14:58

parfait, merci beaucoup de votre aide,

Je prèfère la première solution car elle me garde les noms mean et N.
En utilisant la seconde solution transpose, cela me supprime mes noms de colonnes N et mean. je vais regarder les fonctions transpose pour disponible pour data.table.

Cordialement,
Mélissa


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité