Summarise

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

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Summarise

Messagepar Anais Payen » 15 Avr 2019, 13:58

Bonjour à tous,

J'aurais besoin d'un petit coup de pouce car je suis totalement bloquée, voici mon df :

Code : Tout sélectionner

df<-data.frame(patient=c(1,1,1,1,2,2),
               med=c("med1", "med1", "med1", "med2", "med3", "med4"),
               date=c("d1", "d2", "d3", "d1", "d4", "d5"))
             

Code : Tout sélectionner

  patient  med date
1       1 med1   d1
2       1 med1   d2
3       1 med1   d3
4       1 med2   d1
5       2 med3   d4
6       2 med4   d5


Et j'aimerai obtenir ceci :

Code : Tout sélectionner

     patient  med nb_occurence periode nb_med_diff
1       1 med1            3   d3-d1           2
2       1 med2            1      d1           2
3       2 med3            1      d4           2
4       2 med4            1      d5           2


Il s'agit pour chaque patient, de résumer la ligne médicament en comptant le nombre d'occurence pour celui-ci ainsi que la période sur laquelle il est donné.

Pour l'instant, je ne sais compter que le nombre de med différents pour chaque patient grâce à :

Code : Tout sélectionner

test_med <-
  df %>%
  group_by(patient) %>%
  summarise(
    nb_med_diff = n_distinct(med)
  )



Si quelqu'un a une piste sur laquelle chercher, je suis preneuse!

Merci d'avance, et bonne journée

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Summarise

Messagepar Pierre-Yves Berrard » 15 Avr 2019, 14:25

Bonjour,

Code : Tout sélectionner

group_by(patient, periode)

*edit : pas bon
PY

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Summarise

Messagepar Pierre-Yves Berrard » 15 Avr 2019, 14:43

Lu un peu vite.

Ceci s'approche plus du résultat souhaité :

Code : Tout sélectionner

df %>%
  group_by(patient, med) %>%
  summarise(
    nb_occurences = n(),
    periode = paste(last(date), first(date), sep = "-")
  )
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Summarise

Messagepar Anais Payen » 15 Avr 2019, 15:07

Pierre-Yves Berrard a écrit :Lu un peu vite.

Ceci s'approche plus du résultat souhaité :

Code : Tout sélectionner

df %>%
  group_by(patient, med) %>%
  summarise(
    nb_occurences = n(),
    periode = paste(last(date), first(date), sep = "-")
  )



Merci pour votre repost, comme toujours cela correspond parfaitement à ma recherche!
Grâce à votre formule j'ai même réussi à ajouter un colonne qui correspond à la différence entre mes 2 dates :

Code : Tout sélectionner

med_id <-
df %>%
  group_by(patient, libelle_produit) %>%
  summarise(
    nb_occurences = n(),
    periode = paste(last(date), first(date), sep = "//"),
    nb_jour = difftime (last(date),first(date)
  )


Merci encore!

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Summarise

Messagepar Anais Payen » 16 Avr 2019, 12:47

Bonjour,

je rencontre un autre problème, sans trouver la solution, voici donc mon code :

Code : Tout sélectionner

df2 <-
df1 %>%
  group_by(patient, libelle_produit) %>%
  summarise(
    nb_occurences = n(),
    periode = paste(last(date), first(date), sep = "//"),
    nb_jour = difftime (first(date),last(date)),
    anter_ttt = difftime(date, d_sortie, units = "weeks")
  )


et j'ai comme réponse :

Code : Tout sélectionner

Erreur : Column `anter_ttt` must be length 1 (a summary value), not 2


J'ai le même nombre de lignes dans ma colonne date, et d_sortie, mes 2 variables sont codées en date..

Quelqu'un aurait il une idée?

Merci

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Summarise

Messagepar Pierre-Yves Berrard » 16 Avr 2019, 13:31

summarise attend une unique valeur par groupe.

Or, pour un groupe comportant n lignes, difftime(date, d_sortie, units = "weeks") renverra un vecteur de taille n : les durées entre date et d_sortie calculées terme à terme.

S'inspirer de la ligne du dessus (nb_jour = ...) ?
PY

Anais Payen
Messages : 60
Enregistré le : 25 Fév 2019, 08:50

Re: Summarise

Messagepar Anais Payen » 16 Avr 2019, 13:49

Pierre-Yves Berrard a écrit :summarise attend une unique valeur par groupe.

Or, pour un groupe comportant n lignes, difftime(date, d_sortie, units = "weeks") renverra un vecteur de taille n : les durées entre date et d_sortie calculées terme à terme.

S'inspirer de la ligne du dessus (nb_jour = ...) ?


Je ne peux donc pas calculer une différence de dates entre 2 colonnes, si j'utilise summarise?
Ou j'ai mal compris votre explication?

Pierre-Yves Berrard
Messages : 1029
Enregistré le : 12 Jan 2016, 23:30

Re: Summarise

Messagepar Pierre-Yves Berrard » 16 Avr 2019, 13:55

Vous pouvez, puisque vous l'avez fait pour nb_jour.
Je ne sais pas comment se présentent les données, mais est-ce volontaire de ne plus utiliser les fonctions qui synthétisent plusieurs valeurs en une seule (comme first, last, unique...) ?
PY


Retourner vers « Questions en cours »

Qui est en ligne

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