Tapply et argument même longueur

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

mafab francoise
Messages : 25
Enregistré le : 01 Avr 2018, 16:14

Tapply et argument même longueur

Messagepar mafab francoise » 03 Aoû 2020, 12:59

Bonjour à tous,

Je rencontre un problème avec le warning message suivant:
Error in tapply(alr$Bleaching_index, list(alr$Sites, alr$Years), mean) :
les arguments doivent avoir même longueur


Je comprend bien que mon tableau de données contient des NA et donc je souhaite qu'elle ne soit pas pris en compte voici mon tableau de données

Sites Years Month Bleaching_index
1 ALBC 2016 March 41.93
2 ALBC 2016 April 17.60
3 ALBC 2016 July 0.83
4 ALBC 2016 August 0.00
5 ALBC 2016 September 14.21
6 ALBC 2016 October 0.00

J'ai notamment des NA dans mon tableau, j'ai donc utiliser cette fonction et le script suivant

sum(is.na(data))

data <- data[which(rowSums(is.na(data)) ==0),]

Je recherche les moyennes par sites et par années , j'ai plusieurs sites et année différentes

# Moyenne du bleaching index par sites et par années
moy<-tapply(alr$Bleaching_index,list(alr$Sites,alr$Years),mean)
moy


Et j'obtiens :

Error in tapply(alr$Bleaching_index, list(alr$Sites, alr$Years), mean) :
les arguments doivent avoir même longueur


Faut il que je mentionne na.rm=T? ou je dois créer un autre tableau sans les NA?

Merci d'avance

Cordialement

Marine

Sébastien Rochette
Messages : 54
Enregistré le : 03 Juil 2020, 12:43
Contact :

Re: Tapply et argument même longueur

Messagepar Sébastien Rochette » 03 Aoû 2020, 13:13

Bonjour,


L'exemple que tu nous donnes n'est pas vraiment reproductible. En effet, le tableau présenté ne montre pas de valeurs manquantes.
Par ailleurs, tu montres des lignes de code s'appliquant à un jeu de données s'appelant 'data' et un autre s'appelant 'alr', du coup, nous ne sommes pas en mesure de reproduire l'erreur que tu obtiens.

Si j’applique ce code, je n'ai pas d'erreur:

Code : Tout sélectionner

data <- read.table(text = "Sites Years Month Bleaching_index
1 ALBC 2016 March 41.93
2 ALBC 2016 April 17.60
3 ALBC 2016 July 0.83
4 ALBC 2016 August 0.00
5 ALBC 2016 September 14.21
6 ALBC 2016 October 0.00")

data <- data[which(rowSums(is.na(data)) == 0), ]
moy <- tapply(data$Bleaching_index, list(data$Sites, data$Years), mean)


Ceci étant dit, l'erreur semble plutôt indiquer que tes 3 listes ne sont pas de même longueur. Cela n'a pas de rapport avec les données manquantes pour lesquelles la moyenne devrait renvoyer 'NA'.

Peux-tu renvoyer le résultat de:

Code : Tout sélectionner

length(alr$Bleaching_index)
length(alr$Sites)
length(alr$Years)


Pour un bon exemple reproductible, je recommanderai un peu de lecture. Cet article de blog par exemple: https://thinkr.fr/reprex-ou-comment-demander-de-laide-efficacement/
Sébastien
Dev, Consult, Formateur
ThinkR

mafab francoise
Messages : 25
Enregistré le : 01 Avr 2018, 16:14

Re: Tapply et argument même longueur

Messagepar mafab francoise » 04 Aoû 2020, 06:37

Bonjour pardon, il y avait une erreur dans mon code mon tableau de données est bien data, à certains moments j'ai seulement 8 mois pour une année (2016 par exemple), pour 2017 j'ai 9 mois.... est-ce que comme la length n'est pas la même pour chaque année le problème vient de là ?

Years Month Bleaching_index
2016 March 41.93
2016 April 17.6
2016 July 0.83
2016 August 0
2016 September 14.21
2016 October 0
2016 November 0.41
2016 December 2.52
2017 January 6.73
2017 March 6.78
2017 April 9.8
2017 May 4.48
2017 June 0
2017 September 0.34
2017 October 2.3
2017 November 2
2017 December 5.67
2018 January 1.93
2018 February 12.56
2018 March 5.32
2018 April 3.41
2018 May 1.28
2018 June 0
2018 July 0
2018 August 0.34
2018 September 2.06
2018 October 3.62
2018 November 2.28
2018 December NA
2019 January 12.21
2019 February 13.67
2019 March 17.9
2019 April 5.36
2019 May 3.89
2019 June 0
2019 July 1.99
2019 August 0
2019 September 0
2019 October 0
2019 November 0.97
2019 December 2.11
2020 January 1.11
2016 March 31.78
2016 April 31.01
2016 July 3.83
2016 August 0.18
2016 September 13.23
2016 October 0.44
2016 November 4.74
2016 December 2.5
2017 January 3.43
2017 March 0.99
2017 April 0.96
2017 May 2.47
2017 June 0
2017 September 1.42
2017 October 2.76
2017 November 1.5
2017 December 5.56
2018 January 3.79
2018 February 13.97
2018 March 7.48
2018 April 6.79
2018 May 0
2018 June 0
2018 July 0
2018 August 0.66
2018 September 3.09
2018 October 2.19
2018 November 3.93
2018 December NA
2019 January 8.06
2019 February 18.47
2019 March 18.5
2019 April 21.62
2019 May 8.9
2019 June 0.22
2019 July 3.26
2019 August 2.81
2019 September 0.63
2019 October 0.42
2019 November 2.41
2019 December 2.83
2020 January 4.17
2020 February 1.17

Lorsque j'effectue les codes length j'ai bien le même nombre pour chaque variables soit :

> length(data$Bleaching_index)
[1] 275
> length(data$Sites)
[1] 275
> length(data$Years)
[1] 275

Je pense que mon erreur venait de mon tableau de données qui n'étais pas le bon car je n'ai plus le code erreur que j'avais auparavant...


Désolé donc d'avoir pris de votre temps

Cordialement Marine

Sébastien Rochette
Messages : 54
Enregistré le : 03 Juil 2020, 12:43
Contact :

Re: Tapply et argument même longueur

Messagepar Sébastien Rochette » 04 Aoû 2020, 07:21

Le plus important est que vous ayez pu résoudre votre problème.
Pensez quand même aux packages {reprex} et {datapasta} pour partager vos données et votre problème, comme écrit dans l'article de blog (https://thinkr.fr/reprex-ou-comment-demander-de-laide-efficacement/), ce sera plus facile pour vous aider la prochaine fois.
Sébastien
Dev, Consult, Formateur
ThinkR


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité