2013-02-11 4 views
1

J'ai une matrice comme ci-dessous (la première ligne est :):Comment calculer le temps en utilisant une matrice R

method  start   i2   i3   i4   i5   i7   
1 "m1" "17:19:02" "17:19:10" "17:19:18" "17:19:26" "17:19:36" "17:19:47" 

Ainsi, dans chaque ligne je le method name, puis le start time puis le end time dans chaque intervallei(x). J'ai besoin de calculer la quantité de temps pour chaque i(x) qui est le (start time - i(x) time). Je pense que je dois changer le format dans le temps et ensuite faire le moins mais je ne sais pas comment le faire.

Répondre

3
#some data 
df <- read.table(text='method  start   i2   i3   i4   i5   i7   
1 "m1" "17:19:02" "17:19:10" "17:19:18" "17:19:26" "17:19:36" "17:19:47" 
2 "m2" "17:19:05" "17:19:10" "17:19:18" "17:19:26" "17:19:36" "17:19:47"',stringsAsFactors=FALSE) 

m <- as.matrix(df) 


#transform matrix to data.frame 
df <- as.data.frame(m,stringsAsFactors=FALSE) 

#melt to long format 
library(reshape2) 
df <- melt(df,id.vars="method") 
#transform to date-time 
df$value <- as.POSIXct(df$value,"%H:%M:%S",tz="GMT") 

#calculate time differences 
library(plyr) 
ddply(df,.(method),transform,timediff = value-value[variable=="start"]) 

    method variable    value timediff 
1  m1 start 2013-02-11 17:19:02 0 secs 
2  m1  i2 2013-02-11 17:19:10 8 secs 
3  m1  i3 2013-02-11 17:19:18 16 secs 
4  m1  i4 2013-02-11 17:19:26 24 secs 
5  m1  i5 2013-02-11 17:19:36 34 secs 
6  m1  i7 2013-02-11 17:19:47 45 secs 
7  m2 start 2013-02-11 17:19:05 0 secs 
8  m2  i2 2013-02-11 17:19:10 5 secs 
9  m2  i3 2013-02-11 17:19:18 13 secs 
10  m2  i4 2013-02-11 17:19:26 21 secs 
11  m2  i5 2013-02-11 17:19:36 31 secs 
12  m2  i7 2013-02-11 17:19:47 42 secs 
+0

Vous avez raison, mais je ne voulais pas faire de suppositions. (Le temps ne peut-il pas augmenter ici? Les colnames suivent-ils toujours le modèle dans la question?) – Roland

+0

Un grand merci pour la réponse @Roland – hora

Questions connexes