2016-02-18 4 views
0

В моих данных у меня есть столбец температурных измерений вместе с столбцом, показывающим время, прошедшее до тех пор, пока температура не будет измерена регистратором данных. Данные содержат 500000+ наблюдений.r - Добавление столбца времени к кадру данных на основе подсчета времени

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  

Регистратор данных начал запись в 30.07.2012, 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

Вы не упоминаете единицу 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, если вы беспокоитесь о получении его в правильное местное время.

+0

Работала как очарование для всего столбца после его изменения до «eggtemp $» прошло время '<- dhours (eggtemp $' time прошло ') "и " time_passed <- eggtemp $' time прошло '" , Благодаря! – Joris

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 
+0

Спасибо за ответ! При запуске кода возникла ошибка: «Ошибка в data.frame (..., check.names = FALSE): аргументы подразумевают различное количество строк: 0, 1 ' – Joris

+0

Хорошо, что не работает, теперь он работает (изменено« df $ time_passed "до" df $ "прошло время"). Просто синтаксическая ошибка – Joris