У меня есть два файла данных, один набор необработанных данных и один файл калибровки.Я пытаюсь найти время между первым и вторым прогоном калибровки и сопоставить его с частью времени в необработанном файле, чтобы проверить данные с помощью линейной регрессии (известный наклон и перехват).
Я возился с циклами, и я знаю, что он не идеален в R, но сейчас я не вижу другого пути.
Вот пример файлов
> cal
time slope intercept pressure
24.51 2.4 -71 101
25.61 1.7 -12 101
...
27.12 1.8 -23 102
И пример необработанных данных
> raw
time CO2
24.53 320
24.54 322
24.55 322
....
....
....
25.65 433
25.73 431
Поскольку файл калибровки имеет переменную длину, а необработанные файлы никогда не имеют идеально совпадающей отметки времени, я использовал цикл forчтобы отфильтровать набор необработанных данных, применить наклон и пересечение и создать новый столбец в исходном кадре необработанных данных с калиброванными значениями.
Вот что у меня есть
mylist <- list()
for (i in 1:length(cal)) {
if (raw$time > cal[i,1] & raw$time < cal[(i+1),1]) {
initial_t = cal[i,1]
final_t = cal[(i+1),1]
initial_b = cal[i,3]
final_b = cal[(i+1),3]
initial_m = cal[i,2]
final_m = cal[(i+1),2]
initial_p = cal[i,4]
final_p = cal[(i+1), 4]
b_factor = (final_b - initial_b)/(final_t - initial_t)
m_factor = (final_m - initial_m)/(final_t - initial_t)
p_factor = (final_p - initial_p)/(final_t - initial_t)
vec <- raw %>%
filter(raw, between(raw$time, initial_t, final_t)
cal_m <- initial_m + m_factor*(vec$time - initial_t)
cal_b <- initial_b + b_factor*(vec$time - initial_t)
cal_p <- initial_p + p_factor*(vec$time - initial_t)
new_value <- ((cal_m * vec$CO2) + cal_b)*(cal_p/101.325)
vec$new_value <- new_value
mylist[[i]] <- vec
}
}
mylist <- as.data.frame(do.call("rbind", mylist))'
И я получаю сообщение об ошибке «условие имеет длину> 1, и будет использоваться только первый элемент»
Любые советы или предложения о том, как отсортировать один фрейм данных в соответствии с окномвремени по другому?