Bonjour à tous. J'essaye depuis une bonne semaine de résoudre un problème de format de données.
En effet, avec un premier script R je crée une data.frame que j'ai sauvegardé dans un fichier.txt de type :
Je répète cette opération pour plusieurs fichiers. J'obtiens donc n fichiers.txt"µ2013-03-27_11h53m_Subject 2.txt","µ2013-03-28_11h08m_Subject 2.txt","Mean","SEM"
"Type",G1D2,G1D2,G1D2,G1D2
"Early Error",3,0,1.5,2.12
"DuringLight_0%",0,0,0,0
"DuringLight_50%",10,5,7.5,3.54
"DuringLight_100%",0,0,0,0
"Omission_0%",0,0,0,0
"Omission_50%",21,2,11.5,13.44
"Omission_100%",0,0,0,0
"TR0%",NaN,NaN,NaN,NA
"TR50%",580.71,337.05,458.88,172.29
"TR100%",NaN,NaN,NaN,NA
"DelaiAppuiD0%",NaN,NaN,NaN,NA
"DelaiAppuiD50%",219.91,132.91,176.41,61.52
"DelaiAppuiD100%",NaN,NaN,NaN,NA
"DelaiAppuiG0%",NaN,NaN,NaN,NA
"DelaiAppuiG50%",600,238.67,419.33,255.5
"DelaiAppuiG100%",NaN,NaN,NaN,NA
"NombreAppuisD0%",0,0,0,0
"NombreAppuisD50%",107,90,98.5,12.02
"NombreAppuisD100%",0,0,0,0
"NombreAppuisG0%",0,0,0,0
"NombreAppuisG50%",15,30,22.5,10.61
"NombreAppuisG100%",0,0,0,0
"MT_From_RIGHT_0%",NaN,NaN,NaN,NA
"MT_From_RIGHT_50%",1553.83,1483.78,1518.8,49.53
"MT_From_RIGHT_100%",NaN,NaN,NaN,NA
"MT_From_LEFT_0%",NaN,NaN,NaN,NA
"MT_From_LEFT_50%",1325.33,929.67,1127.5,279.77
"MT_From_LEFT_100%",NaN,NaN,NaN,NA
"ConsumptionTime_BIG_Reward",4125.66,4846.63,4486.15,509.8
"ConsumptionTime_SMALL_Reward",3639.23,3483.33,3561.28,110.24
"Ratio (entree mangeoire malgre erreur)",0,0,0,0
Jusque-là, pas de soucis. J'ouvre ensuite un deuxième script avec lequel, sur l'ensemble des fichiers, je récupère une seule colonne de chaque fichier que je regroupe en un seul data.frame :
"names" est le vecteur de mes noms de fichiers à ouvrir.
# Ici 'MEAN' n'a pas de rapport avec le fonction 'mean()' c'est juste que les valeurs des colonnes que je récupère correspondent à des moyennes calculées dans le premier script.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 X<-1 MEAN<-lapply(names, function(fichier) { data1 <- read.table(fichier, skip=X, header=T, sep=",", dec=".", quote="") a<-data1[ncol(data1)-1] return(a) }) tab <- do.call(cbind, MEAN)
J'obtiens ceci :
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
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 > tab G1D2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 1 4.00 0.00 1.50 0.00 1.50 1.50 2 0.00 0.00 0.00 0.00 0.00 0.00 3 0.00 1.00 7.50 2.00 0.00 0.00 4 6.00 5.50 0.00 0.00 15.50 15.50 5 0.00 0.00 0.00 0.00 0.00 0.00 6 0.00 0.00 11.50 0.00 0.00 0.00 7 3.00 0.50 0.00 0.00 15.00 15.00 8 NaN NaN NaN NaN NaN NaN 9 NaN NaN 458.88 348.50 NaN NaN 10 254.96 NaN NaN NaN 311.80 311.80 11 NaN NaN NaN NaN NaN NaN 12 NaN NaN 176.41 259.28 NaN NaN 13 443.52 NaN NaN NaN 108.40 108.40 14 NaN NaN NaN NaN NaN NaN 15 NaN NaN 419.33 247.70 NaN NaN 16 335.69 NaN NaN NaN 305.84 305.84 17 0.00 0.00 0.00 0.00 0.00 0.00 18 0.00 31.50 98.50 69.00 0.00 0.00 19 55.00 57.50 0.00 0.00 52.00 52.00 20 0.00 0.00 0.00 0.00 0.00 0.00 21 0.00 28.50 22.50 51.00 0.00 0.00 22 66.00 2.50 0.00 0.00 69.00 69.00 23 NaN NaN NaN NaN NaN NaN 24 NaN NaN 1518.80 1114.43 NaN NaN 25 1687.09 NaN NaN NaN 1193.66 1193.66 26 NaN NaN NaN NaN NaN NaN 27 NaN NaN 1127.50 756.08 NaN NaN 28 1945.00 NaN NaN NaN 1136.99 1136.99 29 5825.56 6934.57 4486.15 4795.80 5810.57 5810.57 30 3489.08 4782.36 3561.28 3653.67 3321.92 3321.92 31 0.00 0.00 0.00 0.00 0.00 0.00
Je remplace ensuite la valeur 'NaN' par 0.1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part tab[tab=='NaN']<-0.1
Et j'applique une petite formule pour me faire la moyenne pour une ligne sans tenir compte de la valeur '0.1' :
Et j'obtiens les erreurs suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 > EC<-function(x) round(((sd(x))/(sqrt(length(names)-1))),2) # Formule SEM t<-tab[1,] a2<-vector() for (i in 1:length(t)) if (t[i]!=0.1) {a2[i]<-t[i]} t<-na.omit(a2) as.vector(t) t1<-mean(t) s1<-EC(t)
En effet, "t" possède des levels (G1D2...) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 > t1<-mean(t) Message d'avis : In mean.default(t) : l'argument n'est ni numérique, ni logique : renvoi de NA > s1<-EC(t) Erreur : is.atomic(x) is not TRUE
Je suppose que ce sont ces levels qui posent problème, mais je n'arrive pas à les enlever malgré de multiples fonctions comme "drop=T", ni même si je fais "as.vector(t)"...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 > mean(t) G1D2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 4.0 0.0 1.5 0.0 1.5 1.5 Message d'avis : mean(<data.frame>) is deprecated. Use colMeans() or sapply(*, mean) instead.
Ni même encore, si je fais ce que R me dit :
Quelqu'un aurait-il une suggestion sur l'erreur que je dois faire et que je ne trouve pas ? Dois-je supprimer les "dimnames" de mon fichier txt ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 > sapply(t,mean) G1D2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 4.0 0.0 1.5 0.0 1.5 1.5 > t G1D2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 1 4 0 1.5 0 1.5 1.5 > colMeans(t) G1D2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 G1D2.2 4.0 0.0 1.5 0.0 1.5 1.5
Je confirme que je ne comprends pas complètement les levels(). Je sais juste que c'est un ensemble de "valeurs" rattachées à une variable qualitative, si j'ai bien compris...
Partager