【问题标题】:How to find the difference of time (Time taken to process a file) in R?如何在 R 中找到时间差(处理文件所用的时间)?
【发布时间】:2016-06-08 01:42:49
【问题描述】:

我有日志数据,它记录了开始日期时间和结束日期时间戳。

日志文件中的数据如下所示 Preapred data in excel

Start_Date1 Start_Time1 Start_Millisecond1  Start_Date2 Start_Time2 Start_Millisecond2
29-11-2015  18:25:04    671 29-11-2015  18:40:05    275
29-11-2015  18:25:03    836 29-11-2015  18:40:04    333
10-11-2015  02:41:57    286 10-11-2015  02:51:52    690

当我使用 Rstudio 将数据加载到 R 中时。数据类如下所示。

Data Loaded and Its data type

我正在使用下面的代码行将日期转换为 POSIXlt。

nov$Start.Date1<-as.POSIXlt(as.character(nov$Start.Date1), format="%d-%m-%Y")

nov <-read.csv(file = '././data/Data For R Nov CBEFF log.csv',header = TRUE,na.strings = FALSE,stringsAsFactors = FALSE)

str(nov$Start.Time1)

nov$Start.Date1

nov$Start.Time1

nov$Start.Date2

nov$Start.Time2

**

> 我想计算完成时间,即 > StartTime2-StartTime1

**

StartTime1 和 StartTime2 现在是 chr 数据类型。

【问题讨论】:

  • 我已经调查过了,但无法得到我想要的东西..
  • 如果您向我们展示您的尝试以及为什么没有奏效,您更有可能获得帮助。您还应该提供a minimal reproducible example 而不是屏幕截图。

标签: r datetime time logfile-analysis


【解决方案1】:

这应该可以解决问题。如果您发布了数据(可重现的示例),我可以检查代码。这样可能会有一些错别字。

nov<-read.delim("sample.csv", sep=";", dec=".")
nov$start1<-as.POSIXlt(paste(nov$Start_Date1,nov$Start_Time1 ,sep=" "), format="%d-%m-%Y %H:%M:%S")
nov$start2<-as.POSIXlt(paste(nov$Start_Date2,nov$Start_Time2 ,sep=" "), format="%d-%m-%Y %H:%M:%S")
nov$timediff<-as.numeric(difftime(nov$start2,nov$start1, unit="secs"))*1000+(nov$Start.Milisecond2-nov$Start.Milisecond1)

这会给你以毫秒为单位的时间

编辑 用样本数据验证。变量名称已从“Start.Date1”更改为“Start_Date1”

【讨论】:

  • Startdate1 和 Startdate2 只是其中没有时间的日期...... startdate1 旁边的列是 starttime1。我需要找到与 Starttime2 下一列到 Startdate2 的区别。我已将问题中的数据链接起来
  • 这就是为什么那里有一个粘贴操作 :D 那应该照顾丢失的时间......至于可重现的例子:你刚刚添加了一个截图(很高兴有),但是拥有数据的子集(例如 dput 或 csv)会更有帮助。
  • 我用您的样本数据进行了验证。除了 colnames 更改之外,第二行中还有一个小错字。但现在它起作用了。当然可能有更好的解决方案,但这可以解决问题。
  • paste(nov$Start_Date1,nov$Start_Time1 ,sep=" ") 的返回值是多少?你确定你的列名没有问题吗(因为你的例子有不同的名字)
  • 兄弟 一切都是完美的。需要在代码中进行一个小的更正。更正的代码。 nov$timediff&lt;-as.numeric(difftime(nov$Start2,nov$Start1,units = "secs"))+((nov$Start.Millisecond2-nov$Start.Millisecond1)/1000) 不是将 1000 乘以秒,而是乘以毫秒。我已检查作为答案感谢您的时间和支持
猜你喜欢
  • 1970-01-01
  • 2021-02-18
  • 2012-10-10
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
相关资源
最近更新 更多