Bonjour,

J'ai un problème que je n'arrive pas à résoudre. J'ai dans ma table R des montants mis sous forme de triangle.

J'ai sur ma ligne quelque chose comme ci-dessous, soit par exemple de Janvier 2017 à Mars 2018 :

Jan Feb Mar ... Nov Dec Jan Feb Mar.

Les données sont en dessous du mois auxquelles elles correspondent mais l'année n'est pas mentionnée devant les mois (Jan17 ou Jan 18 par exemple), ce serait top simple .

Je cherche un moyen de récupérer en fonction du nombre de mois entre Janvier2017 et Mars2018, les données du mois de Mars2018.
Mon problème est que je en vois pas comment gérer cela surtout à cause des NA.

Ce code me permet de récupérer la durée entre deux mois et le mois correspondant. J'utilise ensuite le mois trouvé pour faire une recherche sur mon dataframe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 
#Je fais la différence en nombre de mois entre mes 2 dates
Duree <- floor(time_length(interval(DateDebut, DateFin), unit = "months")) + 1
 
##je récupère le nom du Mois
MoisFin <- if(Duree > 12) { Duree - 12  }else {  Duree }
MoisFin <- month.abb[MoisFin]
 
#Je fais une recherche sur mon data.frame avec le nom du mois trouvé
tab <- as.data.frame(which(data==MoisFin, arr.ind = TRUE))
Juste que là tout va bien mais je suis bloqué parce que je ne vois pas comment indiquer exactement les données de quelle colonne je veux prendre à mon code.

Le data.frame tab me donne ça comme réponse et j'ai besoin que des données de la colonne 29 qui correspondent au mois de Mars 2018 aujourd'hui mais l'année prochaine, les données du mois de Mars 2018 seront en colonne 9.

Je ne vois vraiment pas comment faire cette sélection.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
  row col
1   9   8
2  29   8
3   9  29
4  29  29
Et les colonnes sont parfois espacées avec des NA, je les garde parce que les enlever ne me permet pas non plus de résoudre mon problème et aussi parce qu'elles ne gênent pas le which.

J'espère que je me suis fait comprendre.

Merci par avance