r - 根据时间计数将时间列添加到数据框

时间:2016-02-18 17:59:39

标签: r time timeline

在我的数据中,我有一列温度测量值和一列显示数据记录器测量温度之前的时间。 数据框包含500000多个观测值。

eggtemp <- read.csv("temp_time.csv", header=FALSE)
colnames(eggtemp) <- c("time passed", "temp")

   time passed   temp      
1  0.00043823    16.876    
2  0.00087645    17.903    
3  0.00131470    18.923    
4  0.00175290    19.933    

数据记录器于2014年7月30日13:05:00开始录制。

是否有办法根据开始录制时间在数据集中创建新列,显示测量的准确时间? 就像这个(我在前4行手动输入粗略的时间):

   time passed   temp      time
1  0.00043823    16.876    13:05:00:00
2  0.00087645    17.903    13:05:00:04
3  0.00131470    18.923    13:05:00:09
4  0.00175290    19.933    13:05:00:13

有人能告诉我是否有一个功能需要一个起始时间并添加“时间过去”值,以获得每个观察的确切时间(和日期)?我只是想不出来..

谢谢!

2 个答案:

答案 0 :(得分:0)

有一些方法可以通过strptime之类的方式实现这一目标,但我发现lubridate包有助于在处理时间时保持头脑清醒:

library(lubridate)

df
#   time_passed   temp
# 1  0.00043823 16.876
# 2  0.00087645 17.903
# 3  0.00131470 18.923
# 4  0.00175290 19.933

options(digits.secs = 3) # to see the milliseconds
start <- ymd_hms("2014-07-30 13:05:00.00")
df$time <- start + milliseconds(df$time_passed * 10000)

df
#   time_passed   temp                    time
# 1  0.00043823 16.876 2014-07-30 13:05:00.004
# 2  0.00087645 17.903 2014-07-30 13:05:00.008
# 3  0.00131470 18.923 2014-07-30 13:05:00.013
# 4  0.00175290 19.933 2014-07-30 13:05:00.017

答案 1 :(得分:0)

你没有提到eggtemp[,'time passed']的单位,但我猜你的输入值是几个小时。我使用了lubridate包,它使这些计算变得容易。虽然基本R绝对可以。

start <- mdy_hms("7/30/2014 13:05:00")
time_passed <- c(0.00043823, 0.00087645, 0.00131470, 0.00175290)
time_passed <- dhours(time_passed)
time <- start + time_passed

如果您担心将其置于正确的当地时间,请确保将tz参数设置为mdy_hms