2 votes

Converting seconds to durations

Je débute tout juste avec R.

Mes données se trouvent dans un fichier csv. Voici un extrait :

p, t, a, b, c
p01, t1, 4292.226015, 4292.226015, 0.0
p01, t3, 693.795607, 693.795607, 0.0
p02, t1, 262.798468, 262.798468, 0.0
p02, t2, 113.381499, 113.381499, 0.0
p02, t3, 325.854107, 325.854107, 0.0
p02, t4, 428.073246, 428.073246, 0.0
p02, t5, 319.010848, 319.010848, 0.0

... et je le charge comme suit :

data <- read.csv(file='data.csv',head=TRUE,sep=',')

Les trois dernières colonnes sont des valeurs de durée (en secondes), et j'aimerais qu'elles soient des objets duration de lubridate. Comment puis-je y parvenir ?

J'ai essayé de convertir les colonnes après le chargement du csv, comme ceci :

data$a <- dseconds(data$a)
data$b <- dseconds(data$b)
data$c <- dseconds(data$c)

... et au début cela semble fonctionner. Cependant, lorsque je demande un résumé, plusieurs avertissements s'affichent dont je n'arrive pas à interpréter :

> summary(tasks)
group  task  a               b               c
p01:2  t1:2  Min.   : 113.4  Min.   : 113.4  Min.   :0  
p01:5  t2:1  1st Qu.: 290.9  1st Qu.: 290.9  1st Qu.:0  
       t3:2  Median : 325.9  Median : 325.9  Median :0  
       t4:1  Mean   : 919.3  Mean   : 919.3  Mean   :0  
       t5:1  3rd Qu.: 560.9  3rd Qu.: 560.9  3rd Qu.:0  
             Max.   :4292.2  Max.   :4292.2  Max.   :0  
Avertissements :
1: In quantile.default(object) :
  La classe 'Duration' ne possède pas de fente 'names' ; attribuer un attribut de noms créer un objet invalide
2: In summary.default(X[[3L]], ...) :
  La classe 'Duration' ne possède pas de fente 'names' ; attribuer un attribut de noms créer un objet invalide
3: In summary.default(X[[3L]], ...) :
  La classe 'Duration' ne possède pas de fente 'names' ; attribuer une fonction à plusieurs chaînes ("summaryDefault", "table", ...); le résultat ne sera plus un objet S4
>

2voto

agstudy Points 55104

C'est un avertissement. Le summary essaie de convertir les objets de durée en classe c("summaryDefault", "table") Vous pouvez le reproduire comme ceci :

   class(data$a) <- c("summaryDefault", "table")
Message d'avertissement:
In class(dat$da) <- c("summaryDefault", "table") :
  Définition de la classe(x) à plusieurs chaînes ("summaryDefault", "table", ...); 
          le résultat ne sera plus un objet S4.

Vous pouvez définir comment convertir la classe Duration en classe table par exemple.

    setAs("Duration", "table", function(from) from@.Data) ## conversion bidon ici

Maintenant je peux appliquer le résumé sans avertissements

 summary(dat)
      p                  t                   a                b                c           da      
 Length:7           Length:7           Min.   : 113.4   Min.   : 113.4   Min.   :0   n.vars :0     
 Class :character   Class :character   1st Qu.: 290.9   1st Qu.: 290.9   1st Qu.:0   n.cases:6435  
 Mode  :character   Mode  :character   Median : 325.9   Median : 325.9   Median :0                 
                                       Mean   : 919.3   Mean   : 919.3   Mean   :0                 
                                       3rd Qu.: 560.9   3rd Qu.: 560.9   3rd Qu.:0                 
                                       Max.   :4292.2   Max.   :4292.2   Max.   :0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X