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 :

Recodage conditionnel sous R


Sujet :

R

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2023
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2023
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Recodage conditionnel sous R
    Bonjour à toutes et tous,

    Je vous adresse une question de recodage conditionnel sous r car je ne trouve pas la solution.
    La base de données présente des patients (plus de 5000) qui suivent un traitement.
    Lorsqu'un patient prend le traitement lors d'un mois donnée, la colonne mois est renseignée "1". Lorsqu'il ne reçoit rien, la colonne est renseignée "NA".
    Hors, pour certains patients, l'absence de traitement signifie simplement une pause. Le traitement reprendra après.

    ID M1 M2 M3 M4 M5 M6
    1 NA NA. 1 NA. NA 1
    2 1 1 1 1 1 1
    3 NA 1 1 1 1 1
    4 NA NA 1 NA NA 1
    5 NA NA NA NA NA 1

    Je voudrais recoder les NA avant le premier traitement ("1) en "0" et les NA après le premier traitement comme des pauses ("p")

    ID M1 M2 M3 M4 M5 M6
    1 0 0 1 p p 1
    2 1 1 1 1 1 1
    3 0 1 1 1 1 1
    4 0 0 1 p p 1
    5 0 0 0 0 0 1

    Avez vous une idée de la boucle r qui me permettait de le faire ?
    En vous remerciant

  2. #2
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2006
    Messages
    485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Corse (Corse)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 485
    Points : 839
    Points
    839
    Par défaut
    bonjour , une solution un peu "laborieuse", il doit avoir plus simple


    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
    18
    19
     
    library(tidyverse)
     
    remplacer_NA <- function(x,y){
      l=str_replace_all(x,"NA","N")
      idx1=str_locate(l,"1")[1,"start"]
      idxNA=y
       if(idx1<idxNA){return("p")}else{"0"}
    }
     
     
    df=read.csv2("le_df.csv") |>mutate(across(starts_with("M"),as.character)) |> 
      unite("ms",M1:M6,sep="",remove = FALSE) |>
     
    pivot_longer(-c(ID,ms),names_to = "mois",values_to = "val") |> 
      group_by(ID) |> mutate(rang=row_number()) |> rowwise() |> 
      mutate(val=ifelse(is.na(val),remplacer_NA(ms,rang),val)) |> 
      select(-ms,-rang) |> 
      pivot_wider(names_from = mois,values_from = val)

Discussions similaires

  1. Mise en forme conditionnelle sous 2003
    Par renkanaan dans le forum IHM
    Réponses: 0
    Dernier message: 18/09/2007, 18h34
  2. update conditionnel sous oracle
    Par piment dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/07/2007, 14h48
  3. les groupement conditionnels sous birt
    Par soupdji dans le forum BIRT
    Réponses: 1
    Dernier message: 27/04/2007, 14h36
  4. somme conditionnelle sous VBA
    Par léclaireur dans le forum Général VBA
    Réponses: 5
    Dernier message: 26/04/2007, 11h32
  5. Mise en forme conditionnelle sous Excel
    Par crosse9 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 21/09/2006, 01h50

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