在我的数据中,我有一列温度测量值和一列显示数据记录器测量温度之前的时间。 数据框包含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
有人能告诉我是否有一个功能需要一个起始时间并添加“时间过去”值,以获得每个观察的确切时间(和日期)?我只是想不出来..
谢谢!
答案 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
。