read.table

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

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 27 Avr 2007, 10:53

Bonjour,

Je ne comprends pas trop ce que tu cherches a faire ensuite. Qu'est-ce qui ne marche pas dans mon code ? L’imporatation des données, le mise en forme en tableau, le remplacement des valeurs manquantes par des 0 ou des NA ? Je ne sais pas quel test tu cherches a faire mais bien souvent tu t'en sors avec les NA par un paramètre du genre na.omit ou na.rm=TRUE pour qu'il ne prenne pas en compte les valeurs NA. Si c'est une condition sur les NA tout dépends de ce que tu veux faire.

Code : Tout sélectionner

ted <- matrix(rnorm(25),5,5)
ted[sample(1:25,10)] <- NA
ted <- as.data.frame(ted)
ted
          V1          V2         V3        V4         V5
1 -0.7767314  0.30862569 -0.5909241        NA -1.0915417
2         NA  0.07711566 -0.4561516        NA         NA
3  0.2242927 -0.09120063         NA  1.307521 -0.4842482
4         NA          NA  1.1562340        NA -0.9577429
5         NA -0.49766221  1.7176863 -1.471778         NA
apply(ted,2,mean) # moyenne en colonne sans paramètre supplémentaire
V1 V2 V3 V4 V5
NA NA NA NA NA
apply(ted,2,mean,na.rm=TRUE) # en lui disant de ne pas tenir compte des NA
         V1          V2          V3          V4          V5
-0.27621936 -0.05078037  0.45671115 -0.08212846 -0.84451095
# pour transformer les NA en 0 ou l'inverse
ted[is.na(ted)] <- 0
ted
          V1          V2         V3        V4         V5
1 -0.7767314  0.30862569 -0.5909241  0.000000 -1.0915417
2  0.0000000  0.07711566 -0.4561516  0.000000  0.0000000
3  0.2242927 -0.09120063  0.0000000  1.307521 -0.4842482
4  0.0000000  0.00000000  1.1562340  0.000000 -0.9577429
5  0.0000000 -0.49766221  1.7176863 -1.471778  0.0000000
ted[ted==0] <- NA
ted
          V1          V2         V3        V4         V5
1 -0.7767314  0.30862569 -0.5909241        NA -1.0915417
2         NA  0.07711566 -0.4561516        NA         NA
3  0.2242927 -0.09120063         NA  1.307521 -0.4842482
4         NA          NA  1.1562340        NA -0.9577429
5         NA -0.49766221  1.7176863 -1.471778         NA

Maxime

Couanais Pierre
Messages : 213
Enregistré le : 26 Fév 2007, 12:41

Messagepar Couanais Pierre » 27 Avr 2007, 12:10

En fait pour la suite je veux noter l'indice du de la derniere donnée n'etant pas un NA :

> c
[1] 20051116 20051116 20051116 20051117 20051118 20051118 20051120 NA NA NA ........

Pour chaque ligne comme celle ci je veux stocker la valeur 7 car c[7]=une donnée et c[8] = NA.

Donc je voulais faire un while c[i]!=NA i=i+1. Mais ca ne marchait pas.

Mais la avec ta formule c[is.na(c)]=0 c'est parfait, car je peux faire le while avec 0 et ca marche!

Je sais pas si j'ai été très clair mais en résumé : tu m'aides bien!!

Allez j'abuse : sais tu comment transformer une nombre de la forme 20051120 en date 20 Novembre 2005 ?

Mais je vais chercher dans l'aide de R ca doit se trouver ca!!

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 27 Avr 2007, 14:30

Re,


Tu n'es pas obligé de t'embêter avec mon script pour ça, tu incorpores ton tableau avec read.table et tu fais comme suit :

Code : Tout sélectionner

ted <- read.table("read.txt",fill=TRUE,blank.lines.skip = FALSE,sep="~")
ted
  V1 V2 V3 V4 V5 V6 V7 V8 V9
1  A  B  C  A  B  B  A  B  B
2  A  B  B                 
3  A  C                     
4                           
5  A  B  C  A  B  B         
6  A  D
apply(ted,1,function(x) max(which(x!="")))
   1    2    3    4    5    6
   9    3    2 -Inf    6    2

Et ainsi tu récupères la dernière valeur qui n'est pas un "", tu peux aussi faire ça avec un tableau avec des NA. Quand il retourne -Inf c'est que ta ligne est vide.

Maxime

Couanais Pierre
Messages : 213
Enregistré le : 26 Fév 2007, 12:41

Messagepar Couanais Pierre » 27 Avr 2007, 14:45

IM PEC

merci

Couanais Pierre
Messages : 213
Enregistré le : 26 Fév 2007, 12:41

Messagepar Couanais Pierre » 27 Avr 2007, 15:04

Mais attend avec ce code t'as aps de NA toi? qui remplacent les blancs?

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 30 Avr 2007, 09:27

Re,

Je n'ai fait que reprendre ton code ou tu as placé la chaîne de caractères la plus longue en premier j'ai importé le tableau dans R. Ce qui compte pour savoir combien de valeurs sont dans chaque ligne ce n'est pas trop ce qu'il y a ou non dans ton tableau parce que dans le apply à toi de modifier la fonction utiliser pour quelle corresponde avec le format de ton tableau (avec des "" ou des NA). Si tu as des NA tu dois pouvoir utiliser un truc du genre function(x) sum(!is.na(x)). Pour les "" tu peux aussi utiliser function(x) sum(x!="").

Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité