2017-06-05 21 views
2

這是我的例子。我讀了以下文件:sample_dataR dplyr中不同單位的行之間的時差

library(dplyr) 

txt <- c('"", "MDN",     "Cl_Date"', 
      '"1", "A", "2017-04-15 15:10:42.510"', 
      '"2", "A", "2017-04-01 14:47:23.210"', 
      '"3", "A", "2017-04-01 14:49:54.063"', 
      '"4", "B", "2017-04-30 13:25:00.000"', 
      '"5", "B", "2017-04-03 17:53:13.217"', 
      '"6", "B", "2017-04-15 15:17:43.780"') 

ts <- read.csv(text = txt, as.is = TRUE) 
ts$Cl_Date <- as.POSIXct(ts$Cl_Date) 
ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>% 
    mutate(time_diff = c(0,diff(Cl_Date))) 
ts <-ts[order(ts$MDN, ts$Cl_Date),] 

因此,我有

MDN Cl_Date   time_diff 
A 4/1/2017 14:47 0 
A 4/1/2017 14:49 2.514216665 
A 4/15/2017 15:10 20180.80745 
B 4/3/2017 17:53 0 
B 4/15/2017 15:17 11.89202041 
B 4/30/2017 13:25 14.92171551 

所以我組由MDN列和計算Cl_Date柱之間的區別。正如你可以看到有時在幾分鐘內(A組)有所不同,有時在幾天(B組)有所不同。

爲什麼時差在不同單位以及如何糾正?

P.S.我無法重現與手動data.frame創建相同的例子,所以我不得不從文件讀取。

UPDATE 1 diff(ts$Cl_Date)似乎是一致的,一切都在幾分鐘內。 dplyr內是否有什麼突破?

UPDATE 2

ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>% 
    mutate(time_diff_2 = Cl_Date-lag(Cl_Date)) 

產生相同的結果。

+1

爲什麼不使用像'DF <一種容易再現的例子 - data.frame(GRP =代表(C( 「一」, 「B」, 「C」, 「d」),每= 3), (0,1,11),c(0,1,11)* 60,c(0,1,11),c(0,1,2),c(0,1,2) )* 60 * 60,c(0,1,11)* 60 * 60 * 24)) ' – Henrik

+0

@Henrik同意,謝謝!現在,它是一個錯誤,我如何報告'dplyr'的錯誤? – user1700890

+1

這不是'dplyr'中的錯誤,它是'difftime'的工作原理。我認爲幫助文本的相關部分是「如果單位=」自動「,則選擇一組合適的單位,其中所有絕對差值都大於1。 – Henrik

回答

4
ts <- ts %>% group_by(MDN) %>% arrange(Cl_Date) %>% 
    mutate(time_diff_2 = as.numeric(Cl_Date-lag(Cl_Date), units = 'mins')) 

將時差轉換爲數值。您可以使用units參數使返回值保持一致。

相關問題