【问题标题】:Process date and time imported from excel in R处理从 R 中的 excel 导入的日期和时间
【发布时间】:2014-08-27 08:55:48
【问题描述】:

我有来自硬拷贝纸的数据,这些数据必须先手动输入到 Excel 文件中,然后再在 R 中处理。 数据包含在不同日期(2014 年 8 月 8 日、2014 年 8 月 19 日)不同时间点(例如 08:10、08:20 等)的不同受试者(按 ID)的变量(读数)的多个读数。每个阅读系列的参考开始时间(例如,08:00)和参考开始日期(例如,2014 年 8 月 18 日)都可用。

包含数据的 excel 文件将如下所示

ID  Reading Date        Time    Ref/Start Time  Ref/Start Date
1   12.1    18.08.2014  7:59    8:00            18.08.2014
1   26.34   18.08.2014  8:10    8:00            18.08.2014
1   35.2    18.08.2014  8:20    8:00            18.08.2014
1   30      18.08.2014  8:30    8:00            18.08.2014
1   12      19.08.2014  8:00    8:00            18.08.2014
1   13      19.08.2014  20:00   8:00            18.08.2014
1   12      20.08.2014  8:00    8:00            18.08.2014

这些数据必须稍后在 R 中处理。我的目标是生成一个新列,其中包含每个阅读系列开始时间点之后的每个阅读时间(以小时为单位)。可以说得到 (y) 与 (x),其中 (x) 是以小时为单位的时间。 我现在将此 excel 文件导入到 R 中(以前保存为 .csv),但我不知道现在应该如何在 R 中生成新列!我应该先在excel中以另一种方式插入数据吗?

我希望我成功地阐明了我的需要,并且我可以从某人那里得到帮助。

非常感谢。

【问题讨论】:

    标签: excel date time rstudio datetime-conversion


    【解决方案1】:

    有很多方法可以做到这一点。这是一个。

    假设您有一个名为 time_d.csv 的 csv 文件中的数据,您可以这样做:

    time_d.csv 如下所示:

    ID  Reading Date    Time    Ref_time    Ref_date
    1   12.1    18.08.2014  07:59   08:00   18.08.2014
    1   26.34   18.08.2014  08:10   08:00   18.08.2014
    1   35.2    18.08.2014  08:20   08:00   18.08.2014
    1   30      18.08.2014  08:30   08:00   18.08.2014
    1   12      19.08.2014  08:00   08:00   18.08.2014
    1   13      19.08.2014  20:00   08:00   18.08.2014
    1   12      20.08.2014  08:00   08:00   18.08.2014
    

    您可以看到我稍微更改了列标题。然后,使用这种格式的 .csv,您可以这样做:

    a1=read.csv("time_d.csv") #reads data into R data frame
    a1$date_read=paste(a1$Date, a1$Time, sep=" ") #adds a new col to data frame
    #by merging two existing cols
    
    a1$date_ref=paste(a1$Ref_date, a1$Ref_time, sep=" ") #adds new col
    a1=subset(a1,select=-c(Date,Time)) #removes the no longer needed cols
    a1=subset(a1,select=-c(Ref_date,Ref_time)) #removes the no longer needed cols
    
    a1$date_read=as.POSIXct(strptime(a1$date_read,"%d.%m.%Y %H:%M" )) #convert 
    #to date/time objects
    
    a1$date_ref=as.POSIXct(strptime(a1$date_ref,"%d.%m.%Y %H:%M" ))
    
    a1$Duration=difftime(a1$date_read,a1$date_ref, units="hours") #adds new col 
    #calculating the time difference in hours
    

    对于您的特定数据,日期格式对于这一行很重要: as.POSIXct(strptime(a1$date_read,"%d.%m.%Y %H:%M" )) 如果您更改日期格式,那么您也应该在 R 中更改此行代码。

    最终结果如下所示:

      ID Reading           date_read            date_ref          Duration
    1  1   12.10 2014-08-18 07:59:00 2014-08-18 08:00:00 -0.01666667 hours
    2  1   26.34 2014-08-18 08:10:00 2014-08-18 08:00:00  0.16666667 hours
    3  1   35.20 2014-08-18 08:20:00 2014-08-18 08:00:00  0.33333333 hours
    4  1   30.00 2014-08-18 08:30:00 2014-08-18 08:00:00  0.50000000 hours
    5  1   12.00 2014-08-19 08:00:00 2014-08-18 08:00:00 24.00000000 hours
    6  1   13.00 2014-08-19 20:00:00 2014-08-18 08:00:00 36.00000000 hours
    7  1   12.00 2014-08-20 08:00:00 2014-08-18 08:00:00 48.00000000 hours
    

    【讨论】:

    • 非常感谢 .. 它确实有效 :) 我非常感谢您的帮助 looooot ...
    • 此评论特别感谢您清楚地展示您的答案...竖起大拇指
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 2015-04-03
    • 1970-01-01
    • 2017-01-01
    • 2015-01-03
    相关资源
    最近更新 更多