2017-06-05 14 views
2

これは私の例です。私はMDNカラムでR dplyr、異なる単位で行間の時間差

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 

だから私のグループを持っているとCl_Date列の間の差を計算し、結果としてsample_data

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),] 

:私は、次のファイルを読んでいます。あなたは時には分単位で(グループA)、時には日単位で(グループB)異なることがあります。

なぜ異なる単位で時間差があり、それを修正するのですか?

P.S.手動のdata.frameの作成で同じ例を再現できなかったので、ファイルから読み込む必要がありました。

更新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 Henrik

+0

@Henrik同意します、ありがとうございます!さて、それはバグですか、 'dplyr'のバグを報告するにはどうすればいいですか? – user1700890

+1

'dplyr'のバグではなく、' difftime'の仕組みです。私は、ヘルプテキストの関連部分は「units = "auto" 'なら、すべての絶対差が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引数を使用すると、戻り値の一貫性を保つことができます。

関連する問題