Arhn - архитектура программирования

метки времени даты не совпадают / не сливаются должным образом в R

У меня есть два фрейма данных:

locA:

Date    Time    Temperature Voltage Longitude   Latitude    Deployment  DateTime
2014-08-08  14:18:25    20.9    1.872   -126.6886   34.95633    A   2014-08-08 14:20:00
2014-08-08  14:38:25    19.8    1.862   -126.6899   34.95675    A   2014-08-08 14:40:00
2014-08-08  14:58:26    19.3    1.856   -126.6911   34.95732    A   2014-08-08 15:00:00
2014-08-08  15:18:26    18.8    1.872   -126.6921   34.95803    A   2014-08-08 15:20:00
2014-08-08  15:38:25    18.6    1.872   -126.6929   34.95872    A   2014-08-08 15:40:00
2014-08-08  15:58:26    18.4    1.859   -126.6937   34.95921    A   2014-08-08 16:00:00
2014-08-08  16:18:25    18.4    1.875   -126.6944   34.95983    A   2014-08-08 16:20:00
2014-08-08  16:38:25    18.4    1.875   -126.6949   34.96021    A   2014-08-08 16:40:00
2014-08-08  16:58:26    18.4    1.872   -126.6956   34.96033    A   2014-08-08 17:00:00
2014-08-08  17:18:26    18.4    1.872   -126.6962   34.96025    A   2014-08-08 17:20:00

и данные:

FileName    Deployment  Start_UTC   Stop_UTC    Duration    sum PrAb    dolPrAb
DASBR1_20140808$140000.wav  A   2014-08-08 14:00:00 2014-08-08 14:02:00 119.6000    0   0   0
DASBR1_20140808$142000.wav  A   2014-08-08 14:20:00 2014-08-08 14:22:00 119.6000    0   0   0
DASBR1_20140808$144000.wav  A   2014-08-08 14:40:00 2014-08-08 14:42:00 119.8000    0   0   0
DASBR1_20140808$150000.wav  A   2014-08-08 15:00:00 2014-08-08 15:02:00 119.6000    0   0   0
DASBR1_20140808$152000.wav  A   2014-08-08 15:20:00 2014-08-08 15:22:00 119.6000    0   0   0
DASBR1_20140808$154000.wav  A   2014-08-08 15:40:00 2014-08-08 15:42:00 119.6000    0   0   0
DASBR1_20140808$160000.wav  A   2014-08-08 16:00:00 2014-08-08 16:02:00 119.6000    1   1   1
DASBR1_20140808$162000.wav  A   2014-08-08 16:20:00 2014-08-08 16:22:00 119.8000    0   0   0
DASBR1_20140808$164000.wav  A   2014-08-08 16:40:00 2014-08-08 16:42:00 119.8000    0   0   0
DASBR1_20140808$170000.wav  A   2014-08-08 17:00:00 2014-08-08 17:02:00 119.6000    0   0   0

На самом деле каждая из них состоит из нескольких тысяч строк. Я хочу объединить их на основе штампа «DateTime» в locA и «Start_UTC» в datA. Оба этих столбца одинаково отформатированы в формате UTC.

locA$DateTime=as.POSIXct(paste(locA$Date, time), format="%Y-%m-%d %H:%M:%S", tz="UTC")
datA$Start_UTC = as.POSIXct(files$Start_UTC, format="%Y-%m-%d %H:%M:%S", tz="UTC")

В locA переменная "time" получается из последовательности, в которой я округляю строку символов в locA $ Time до ближайших 20 минут. «время» - это символьная строка с установленным временем.

str(time)
chr [1:8845] "14:00:00" "14:20:00" "14:40:00" "15:00:00" "15:20:00" "15:40:00" "16:00:00" "16:20:00" "16:40:00" "17:00:00" ...

Когда я объединяю два фрейма данных с помощью locA $ DateTime и datA $ Start_UTC, он никогда не работает должным образом. Я получаю что-то похожее на это каждый раз.

resA = merge(datA,locA, by.x=c("Start_UTC"), by.y=c("DateTime"))

resA:

Start_UTC   FileName    Deployment.x    Stop_UTC    Duration    sum PrAb    dolPrAb Date    Time    Temperature Voltage Longitude   Latitude    Deployment.y
2014-08-08 14:00:00 DASBR1_20140808$140000.wav  A   2014-08-08 14:02:00 119.6000    0   0   0   2014-08-08  20:58:26    19.1    1.872   -126.7018   34.94994    A
2014-08-08 14:20:00 DASBR1_20140808$142000.wav  A   2014-08-08 14:22:00 119.6000    0   0   0   2014-08-08  21:18:26    19.1    1.872   -126.7027   34.94801    A
2014-08-08 14:40:00 DASBR1_20140808$144000.wav  A   2014-08-08 14:42:00 119.8000    0   0   0   2014-08-08  21:38:26    19.1    1.872   -126.7038   34.94608    A
2014-08-08 15:00:00 DASBR1_20140808$150000.wav  A   2014-08-08 15:02:00 119.6000    0   0   0   2014-08-08  21:58:27    18.9    1.865   -126.7050   34.94394    A
2014-08-08 15:20:00 DASBR1_20140808$152000.wav  A   2014-08-08 15:22:00 119.6000    0   0   0   2014-08-08  22:18:27    18.9    1.856   -126.7062   34.94188    A
2014-08-08 15:40:00 DASBR1_20140808$154000.wav  A   2014-08-08 15:42:00 119.6000    0   0   0   2014-08-08  22:38:26    18.8    1.862   -126.7077   34.93994    A
2014-08-08 16:00:00 DASBR1_20140808$160000.wav  A   2014-08-08 16:02:00 119.6000    1   1   1   2014-08-08  22:58:26    18.8    1.859   -126.7090   34.93796    A
2014-08-08 16:20:00 DASBR1_20140808$162000.wav  A   2014-08-08 16:22:00 119.8000    0   0   0   2014-08-08  23:18:26    18.8    1.865   -126.7105   34.93622    A
2014-08-08 16:40:00 DASBR1_20140808$164000.wav  A   2014-08-08 16:42:00 119.8000    0   0   0   2014-08-08  23:38:27    18.6    1.856   -126.7120   34.93480    A
2014-08-08 17:00:00 DASBR1_20140808$170000.wav  A   2014-08-08 17:02:00 119.6000    0   0   0   2014-08-09  23:58:28    18.8    1.849   -126.8051   34.88381    A

Я пробовал это разными способами. Я попытался сохранить locA $ DateTime как есть, где время равно метке времени в datA $ Time, а затем попытался использовать эту функцию, чтобы сопоставить ее с правильным datA $ Start_UTC. Сопоставьте минимальную временную метку locA $ с временной меткой datA $

findrow=function(dt,df) {min(which(df>dt))}
rowA=sapply(locA$DateTime, findrow, df=datA$Start_UTC)
resA=cbind(locA,datA[rowA,])

Это дало мне те же результаты. Я не знаю, что происходит. Я уверен, что это связано с тем, как создаются метки даты и времени, но я не знаю, как это исправить. Если я отформатирую их одинаково и скажу R, что это UTC, не следует ли с ними обращаться так же?

Помогите, пожалуйста, вся помощь, комментарии или юмористические «держись» высказывания были бы очень признательны. Неспособность правильно связать мои широты и долготы с моими временными метками данных действительно вызывает головную боль.

Ваше здоровье.

28.05.2015

Ответы:


1

Интересно, будет ли лучше работать слияние объектов chr вместо объектов POSIXct?

locA$DateTime_str = format(locA$DateTime)
datA$Start_UTC_str = format(datA$Start_UTC)
resA = merge(datA,locA, by.x=c("Start_UTC_str"), by.y=c("DateTime_str"))
28.05.2015
  • Я думал о том же, хотя в целом не могу понять, почему метки времени не работают. Я думаю, что символьная строка может быть лучшим обходным способом. 28.05.2015
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..