IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Retenir 2 obs de chaque groupe sous R


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Retenir 2 obs de chaque groupe sous R
    Bonjour,

    Voici un extrait de ma base de données:

    Patients V1 V2 V3
    1 1 a a
    1 0 b b
    1 1 c NA
    1 0 d NA
    2 0 e NA
    2 1 f f
    2 1 g NA
    2 0 h h
    3 0 i NA
    3 1 j NA
    4 1 k NA
    4 1 l NA
    4 1 m NA

    En fait, je veux créer la variable V3 qu contient les valeurs de V2 pour deux patients de chaque groupe des patients (1111,2222,333,44,555555555, ...).
    Le premier patient c'est celui qui a V1 égale 1 et le deuxième qui a V1 égale 0 (en respectant l'ordre de sélectionner les 2 patients, celui qui V1=1 puis V1=0)
    D'avance merci pour votre aide

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Retenir 2 obs de chaque groupe sous R
    Bonjour,

    Voici une proposition :

    • Numérotation des observations pour pouvoir recoller les morceaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > df <- read.csv("D:/temp/test.txt")
    > df$N <- as.numeric(row.names(df))
    > df
       Id V1 V2  N
    1   1  1  a  1
    2   1  0  b  2
    3   1  1  c  3
    4   1  0  d  4
    5   2  0  e  5
    6   2  1  f  6
    7   2  1  g  7
    8   2  0  h  8
    9   3  0  i  9
    10  3  1  j 10
    11  4  1  k 11
    12  4  1  l 12
    13  4  1  m 13
    • Numérotation des répétitions par groupe pour vérifier si V1=0 est avant ou après V1=1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > df <- df[order(df$Id),]
    > df$obsnum <- sequence(rle(as.vector(df$Id))$lengths)
    > df
       Id V1 V2  N obsnum
    1   1  1  a  1      1
    2   1  0  b  2      2
    3   1  1  c  3      3
    4   1  0  d  4      4
    5   2  0  e  5      1
    6   2  1  f  6      2
    7   2  1  g  7      3
    8   2  0  h  8      4
    9   3  0  i  9      1
    10  3  1  j 10      2
    11  4  1  k 11      1
    12  4  1  l 12      2
    13  4  1  m 13      3
    • Sélection des observations avec V1=1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > df1 <- df[which(df$V1==1),]
    > df1
       Id V1 V2  N obsnum
    1   1  1  a  1      1
    3   1  1  c  3      3
    6   2  1  f  6      2
    7   2  1  g  7      3
    10  3  1  j 10      2
    11  4  1  k 11      1
    12  4  1  l 12      2
    13  4  1  m 13      3
    • Sélection des observations avec V1=0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > df0 <- df[which(df$V1==0),]
    > df0
      Id V1 V2 N obsnum
    2  1  0  b 2      2
    4  1  0  d 4      4
    5  2  0  e 5      1
    8  2  0  h 8      4
    9  3  0  i 9      1
    • Sélection des premières observations de chaque sujet dans df1 (on aurait pu aussi numéroter les répétitions pour sélectionner la première)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > myBys <- data.frame(df1$Id)
    > selec <- by(df1, myBys, head, n=1)
    > df1 <- do.call(rbind, selec)
    > df1
      Id V1 V2  N obsnum
    1  1  1  a  1      1
    2  2  1  f  6      2
    3  3  1  j 10      2
    4  4  1  k 11      1
    • Ajout du numéro de répétition de df1 dans df0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > df0 <- merge(df1[,c("Id","obsnum")],df0,by="Id")
    > df0
      Id obsnum.x V1 V2 N obsnum.y
    1  1        1  0  b 2        2
    2  1        1  0  d 4        4
    3  2        2  0  e 5        1
    4  2        2  0  h 8        4
    5  3        2  0  i 9        1
    • Sélection des observations de df0 avec numéro de répétition > df1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > df0 <- df0[which(df0$obsnum.y > df0$obsnum.x),c("N","Id","V1","V2")]
    > df0
      N Id V1 V2
    1 2  1  0  b
    2 4  1  0  d
    4 8  2  0  h
    • Sélection des premières observations de chaque sujet dans df0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > myBys <- data.frame(df0$Id)
    > selec <- by(df0, myBys, head, n=1)
    > df0 <- do.call(rbind, selec)
    > df0$selec <- 1
    > df0
      N Id V1 V2 selec
    1 2  1  0  b     1
    2 8  2  0  h     1
    • Sélection des observations de df1 s'il y a une observation sélectionnée dans df0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > df1 <- df1[which(df1$Id %in% df0$Id),-5]
    > df1$selec <- 1
    > df1
      Id V1 V2 N selec
    1  1  1  a 1     1
    2  2  1  f 6     1
    • Ajout de la variable selec dans df
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > selec <- rbind(df1,df0)
    > df <- merge(df,selec[,c("N","selec")],by="N",all=TRUE)
    > df
        N Id V1 V2 obsnum selec
    1   1  1  1  a      1     1
    2   2  1  0  b      2     1
    3   3  1  1  c      3    NA
    4   4  1  0  d      4    NA
    5   5  2  0  e      1    NA
    6   6  2  1  f      2     1
    7   7  2  1  g      3    NA
    8   8  2  0  h      4     1
    9   9  3  0  i      1    NA
    10 10  3  1  j      2    NA
    11 11  4  1  k      1    NA
    12 12  4  1  l      2    NA
    13 13  4  1  m      3    NA
    • Calcul de la variable V3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    > df$V3 <- ifelse(df$selec==1,as.character(df$V2),NA)
    > df
        N Id V1 V2 obsnum selec   V3
    1   1  1  1  a      1     1    a
    2   2  1  0  b      2     1    b
    3   3  1  1  c      3    NA <NA>
    4   4  1  0  d      4    NA <NA>
    5   5  2  0  e      1    NA <NA>
    6   6  2  1  f      2     1    f
    7   7  2  1  g      3    NA <NA>
    8   8  2  0  h      4     1    h
    9   9  3  0  i      1    NA <NA>
    10 10  3  1  j      2    NA <NA>
    11 11  4  1  k      1    NA <NA>
    12 12  4  1  l      2    NA <NA>
    13 13  4  1  m      3    NA <NA>
    Cordialement,
    Fichiers attachés Fichiers attachés

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 7
    Points : 9
    Points
    9
    Par défaut Retenir 2 obs de chaque groupe sous R
    Bonjour,
    Merci c'est vraiment super gentil. Votre proposition va m'aider à avancer sur une grande partie de mes analyses.
    Bien cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/03/2016, 17h09
  2. Réponses: 2
    Dernier message: 26/05/2010, 22h07
  3. Contrôle visible sous-condition à chaque enregistrement
    Par Octave Le lorrain dans le forum IHM
    Réponses: 2
    Dernier message: 22/03/2009, 20h24
  4. inserer un groupe sous condition
    Par mikedavem dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 17/01/2008, 09h03
  5. group by sous condition
    Par nicoaix dans le forum Langage SQL
    Réponses: 5
    Dernier message: 22/10/2007, 14h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo