ajout de colonne

Questions sur les objets de R et la manipulation des données

Modérateur : Groupe des modérateurs

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

ajout de colonne

Messagepar LA haumont » 16 Mai 2006, 09:44

bonjour
j'aurais voulu savoir comment créer une colonne avec des 1 et 0 qui correspondent à la présence ou non d'un terme dans une autre colonne!!
exemple: si dans la colonne "comment" on a "Tabac"pour l'individu1, il faudrait créer la colonne "Tabac" et la première ligne serait alors égale a 1!

merci d'avance

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 16 Mai 2006, 11:56

Exemple:

Code : Tout sélectionner

> tmp1 <- data.frame(Comment = c("tabac", "alcool", "tabac"))
> tmp2 <- data.frame(Comment = c("sucre", "alcool", "graisse"))
>
> tmp1
  Comment
1   tabac
2  alcool
3   tabac
> if(any(tmp1$Comment == "tabac")) tmp1$tabac <- ifelse(tmp1$Comment == "tabac", 1, 0)
> tmp1
  Comment tabac
1   tabac     1
2  alcool     0
3   tabac     1
>
> tmp2
  Comment
1   sucre
2  alcool
3 graisse
> if(any(tmp2$Comment == "tabac")) tmp2$tabac <- ifelse(tmp2$Comment == "tabac", 1, 0)
> tmp2
  Comment
1   sucre
2  alcool
3 graisse


Renaud

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 16 Mai 2006, 13:29

j'ai essayé mais aucune nouvelle colonne n'apparait. en fait le problème ca doit etre quand on cherche dans la colonne COMMENT car il y a tte une chaine de caractère pour trouver ou lon peut trouver "Tabac"!!

j'ai essayé ca sinon mais message d'erreur!

Code : Tout sélectionner

if (any (regexpr(pattern="Tabac", text= as.character(test$COMMENT)) test$Tabac <- ifelse (test$COMMENT == "Tabac" , 1, 0))



et quand je met ca:

Code : Tout sélectionner

>test<-data.frame(Tablo)
>fac<-regexpr(pattern="Tabac", text= as.character(test$COMMENT))
>fac
>test[fac>0,]


j'obtiens une nouvelle colonne avec uniquement des 0 a l'intérieur!

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 16 Mai 2006, 17:12

Je reprends l'exemple:

Code : Tout sélectionner

> tmp <- data.frame(Maladie = c("Infarctus", "Hépatite", "Cancer du poumon"),
+                        FR = c("tabac, alcool", "alcool", "tabac"))
> tmp
           Maladie            FR
1        Infarctus tabac, alcool
2         Hépatite        alcool
3 Cancer du poumon         tabac


D'abord on cherche les lignes pour lesquelles la chaîne de caractère "tabac" est présente dans la variable FR:

Code : Tout sélectionner

> pos <- regexpr(pattern = "tabac", text = as.character(tmp$FR))


Le vecteur "pos" prend une valeur > 0 si la chaîne est présente, et 0 sinon:

Code : Tout sélectionner

> pos
[1]  1 -1  1
attr(,"match.length")
[1]  5 -1  5


On réalise un test logique pour savoir s'il existe au moins une ligne avec pos > 0:

Code : Tout sélectionner

> any(pos > 0)
[1] TRUE


Si le test est vrai (le cas ici), on ajoute une colonne "tabac" au data.frame tmp, et on lui affecte la valeur 1 si pos > 0, et 1 sinon:

Code : Tout sélectionner

> if(any(pos > 0)) tmp$tabac <- ifelse(pos > 0, 1, 0)
> tmp
           Maladie            FR tabac
1        Infarctus tabac, alcool     1
2         Hépatite        alcool     0
3 Cancer du poumon         tabac     1

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 17 Mai 2006, 08:12

merci je viens d'y arriver !! je pense que j'aurai d'autres soucy donc a bientot!

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

codage d'un identificateur

Messagepar LA haumont » 17 Mai 2006, 09:27

Je souhaites créer une colonne IdPatient c'est à dire donner un numéro de ligne mais parcontre comme un patient peut etre sur plusieurs lignes il faut garder le même.

Exemple:

NOM idPatient
aaa 1
bbb 2
ccc 3
ccc 3
ddd 4

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

codage d'un identificateur

Messagepar LA haumont » 18 Mai 2006, 14:40

voia comment j'ai commencé mais c'est pas ca car j'obtient que des false dans la colonne "NOM"

Code : Tout sélectionner

>IdPatient <- 1:3620
>if ((NOM[2]=NOM[1]))TriNom$NOM <- ifelse (NOM[2] == NOM[1],IdPatient[2] == IdPatient[1],IdPatient[2] == IdPatient[1]+1)


bien parti ou alors tout a refaire??

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

codage d'un identificateur

Messagepar Renaud Lancelot » 20 Mai 2006, 16:48

Bonjour,

Il s'agit d'une question différente. Il vaut mieux commencer une autre discussion avec un autre sujet.

Réponse:

Code : Tout sélectionner

> nom <- factor(c("aaa", "bbb", "ccc", "ccc", "ddd"))
> id <- as.numeric(nom)
> data.frame(nom, id)
  nom id
1 aaa  1
2 bbb  2
3 ccc  3
4 ccc  3
5 ddd  4


Cordialement,

Renaud

LA haumont
Messages : 41
Enregistré le : 16 Mai 2006, 09:33

Messagepar LA haumont » 22 Mai 2006, 09:15

oki je serais pour les prochaines question!!

mais la ya un truk ki ne va pas...
ca ne commence pas par 1 la liste des IdPatient! put que le fait de ne pas entrer les nom moi mp car le nom des patient provien d'un fichier ! voici ce ke j'ai mi:

Code : Tout sélectionner

> IdPatient <- 1:3620
>TriNom$IdPatient <- IdPatient
>Identifiant <- as.numeric(NOM)
>TriNom(NOM, Identifiant)
>data.frame(NOM, Identifiant)
>TriNom$Identifiant <- Identifiant
>Fix(TriNom)

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 22 Mai 2006, 12:39

LA haumont a écrit :oki je serais pour les prochaines question!!

mais la ya un truk ki ne va pas...
ca ne commence pas par 1 la liste des IdPatient! put que le fait de ne pas entrer les nom moi mp car le nom des patient provien d'un fichier ! voici ce ke j'ai mi:

Code : Tout sélectionner

> IdPatient <- 1:3620
>TriNom$IdPatient <- IdPatient
>Identifiant <- as.numeric(NOM)
>TriNom(NOM, Identifiant)
>data.frame(NOM, Identifiant)
>TriNom$Identifiant <- Identifiant
>Fix(TriNom)


Ce serait super si tu écrivais en français !

C'est normal que "ça ne commence pas par 1": le code que je t'ai indiqué assure "seulement" qu'il y a un identificateur unique par nom.

Si tu veux que "ça commence par 1", il faut ajouter une étape:

Code : Tout sélectionner

> nom <- c("b", "c", "a", "a", "q", "c")
> lev <- unique(nom)
> lev
[1] "b" "c" "a" "q"
> id <- as.numeric(factor(nom, levels = lev))
> data.frame(nom, id)
  nom id
1   b  1
2   c  2
3   a  3
4   a  3
5   q  4
6   c  2


A+

Renaud


Retourner vers « Archives : Manipulation de données avec R »

Qui est en ligne

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