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

r - Adding time column to data frame based on time count

在我的数据中,有一列温度测量值和一列显示数据记录器测量温度之前经过的时间。 数据框包含 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

有人可以告诉我是否有一个函数可以获取开始时间并添加 "time passed" 值,以获得每次观察的确切时间(和日期)?我只是想不通..

谢谢!

当然有一些方法可以用 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

你没有提到 eggtemp[,'time passed'] 的单位,但我根据你输入的值猜测小时数。我使用 lubridate 包,它使这些计算变得容易。尽管使用 base 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