utilisations particulières de tapply

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

yannick ramage
Messages : 22
Enregistré le : 21 Juin 2007, 09:35

utilisations particulières de tapply

Messagepar yannick ramage » 29 Jan 2009, 04:28

Bonjour

Je découvre avec joie tapply et commence à abandonner les boucles for. Cependant je suis confronté à deux problèmes que je n'aurai peut être pas eut avec for..


Le premier est peut être d'avantage lié au liste mais il s'agit d'une sortie de tapply:

Code : Tout sélectionner

date_pf<-tapply(prelevt[prelevt$TYPE_PRELEVT=="PF",][,2],
                prelevt[prelevt$TYPE_PRELEVT=="PF",][,3],
                max,
                simplify=FALSE)

j'obtiens

Code : Tout sélectionner

> date_pf
$A27
[1] "2008-05-07 Pacifique Centre"
$B27
[1] "2008-05-06 Pacifique Centre"
$C27
[1] "2008-06-12 Pacifique Centre"
$D25
[1] "2008-06-06 Pacifique Centre"
$E22
[1] "2008-06-11 Pacifique Centre"
$F24
[1] "2008-07-22 Pacifique Centre"
$G23
[1] "2008-07-29 Pacifique Centre"
$H24
[1] "2008-07-22 Pacifique Centre"
$`P1-10`
[1] "2008-07-08 Pacifique Centre"


Les résultats sont justes, mais je n'arrive à exporter ces résultats dans un dataframe ou autre sans perdre le format des dates

Code : Tout sélectionner

> data.frame(date_pf)
         date_pf
A27   1210078800
B27   1209992400
C27   1213189200
D25   1212670800
E22   1213102800
F24   1216645200
G23   1217250000
H24   1216645200
P1-10 1215435600


Le deuxième problème touche l'utilisation de fonctions destinées à des tables entières avec tapply
La fonction suivante utilise plus de 12 colonnes ce qui fait beaucoup , lorsque je travaillais avec for, je contournais le problème de la façon suivante

Code : Tout sélectionner

ALIM_RELATIF<-function(TABLE){

  TEMPALIM1<-c(TABLE[,4],
                         TABLE[,5],
                         TABLE[,6],
                         TABLE[,7])
.....


le problème est que tapply n'accepte pas de table en premier argument:

Code : Tout sélectionner

Erreur dans tapply(alim, alim[, 3], ALIM_RELATIF) :
        les arguments doivent avoir même longueur

( ce qui n'est pas faux)

Sachant que la fonction ALIM_RELATIF est faite pour s'appliquer à des tables de structure identiques, comment pourrai je faire pour utiliser cette fonction par modalité par modalité, comme avec tapply?[

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

Messagepar Logez Maxime » 29 Jan 2009, 08:17

Bonjour,

Pour la première question :

Code : Tout sélectionner

data.frame(tapply(rep(date(),10),letters[1:10],max))


Pour la deuxième il te suffit de séparer ta table avec ton facteur via la fonction split et d'utiliser la fonction lapply dessus, ou tu dois pouvoir faire ça aussi avec la fonction by :

Code : Tout sélectionner

lapply(split(alim,alim[,3]),ALIM_RELATIF)
by(alim,alim[,3],ALIM_RELATIF)


Maxime

yannick ramage
Messages : 22
Enregistré le : 21 Juin 2007, 09:35

Messagepar yannick ramage » 30 Jan 2009, 03:13

OK merci!

Concernant lapply et by c'est parfait!

par contre je n'arrive pas à exécuter ta ligne

Code : Tout sélectionner

data.frame(tapply(rep(date(),10),letters[1:10],max))
Erreur dans tapply(rep(date(), 10), letters[1:10], max) :
        les arguments doivent avoir même longueur


de plus je crois que la sortie de "date()" ne soit pas utilisable comme une date:

Code : Tout sélectionner

 as.Date(date())
Erreur dans fromchar(x) : la chaîne de caractères n'est pas dans un format standard non ambigu


Sur le principe j'ai compris que tu me suggères de passer par data.frame, mais cela transforme le format de la date.
J'arrive à obtenir un dataframe d'une ligne avec data.frame(sapply(...) ) mais après pas moyen de le passer en colonne ou de faire un calcul sans perdre le format...

Est qu'il existe un guide style: "La manipulation de date sour R pour les noob?" car je perds beaucoup de temps avec ces broutilles.

En tout cas merci Maxime, tu m'as déjà bien aidé et fait avancer.

[/code]


Retourner vers « Questions en cours »

Qui est en ligne

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