2017-10-28 58 views
0

分組使用該代碼的時間差:計算通過ID

idCol <- c('1','1','1','2','2','3','3') 
rowNumIdCol <- c('1','2','3','4','5','6','7') 
stepCol <- c('step1') 
step1Col <- c('30-12-2010:11.02', '31-12-2010:10.06', '05-01-2011:15.12','01-03-2017:09.00', '01-05-2017:09.00', '01-06-2017:09.00', '01-07-2017:09.00') 
mydata <- data.frame(idCol , rowNumIdCol , step1Col) 
colnames(mydata) <- c('id' , 'rowNumId' , 'step1') 

創建數據框:

enter image description here

我試圖通過計算ID分組每個時間戳之間的差異。

這裏是代碼我想:

mydata$"Days spent" <- unlist(by(mydata, mydata$id, function(x) as.numeric(difftime(ymd_hms(x$step1),ymd_hms(x$step1)[1], units= "days")))) 

但這返回不正確的數據框 '花天' 列:

enter image description here

364.9994 & -9464.9554是不正確的值。

我沒有正確計算時差嗎?

回答

2

基於「第一步」的formt,我們需要使用dmy_hm將其轉換爲「日期時間」類

library(dplyr) 
library(lubridate) 
mydata %>% 
    group_by(id) %>% 
    mutate(DaysSpent = as.numeric(difftime(dmy_hm(step1), 
         dmy_hm(step1)[1], units = 'days'))) 
+1

其實,你需要'dmy_hm'。使用'dmy_hms'例如'30-12-2010:11.02'將被解析爲'2020-12-30 10:11:02' –