Добавление разницы во времени к серии файлов - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь создать функцию, в которой я выполняю пакетную обработку папки файлов CSV. Все файлы CSV содержат неправильные метки времени, поэтому у меня есть другой файл с разницей между неправильной меткой времени и соответствующей правильной меткой времени. Например, мои файлы выглядят так:

df1
ID        Visit    Difference (in seconds)
1002      V2       35
2038      V1       86786

df2
ID        Visit    startTime
1002      V2       2017-12-01 19:47:11
1002      V2       2017-12-01 19:49:55
1002      V2       2017-12-01 19:50:42
1002      V2       2017-12-01 20:18:24

...

Я попытался создать оператор if, чтобы добавить разницу, если идентификатор и номер посещения совпадают

if (df1$ID == df2$ID &
      df1$Visit == df2$Visit) {
    df2$startTime <- df2$startTime + df1$Difference
  }

Повторяется добавление 35 секунд, затем 86786 секунд, затем 35 и т. Д., Поэтому я получаю вывод, подобный этому

ID        Visit    startTime
1002      V2       2017-12-01 19:47:46
1002      V2       2017-12-02 19:56:21
1002      V2       2017-12-01 19:51:17
1002      V2       2017-12-02 20:24:50

Я хочу добавить только 35 секунд. Есть ли способ сделать это?

1 Ответ

1 голос
/ 27 марта 2019

Я думаю, что это может помочь:

# load packages
library(dplyr)
library(lubridate)
# reproduce similar data
df1 <-
  data.frame(
    "ID" = c(1002, 2038),
    "Visit" = as.character(c("V2", "V1")),
    "Difference" = c(35, 86786)
  )
df2 <-
  data.frame(
    "ID" = c(rep(1002, 3), 2038),
    Visit = as.character(rep("V2", 4)),
    startTime = ymd_hms(
      "2017-12-01 19:47:11",
      "2017-12-01 19:49:55",
      "2017-12-01 19:50:42",
      "2017-12-01 20:18:24"
    )
  )
# join before adding time
df <- left_join(df2, df1, by = c("ID", "Visit"))
df %>%
  mutate(new_time = if_else(!is.na(Difference),
                            startTime + Difference,
                            startTime))
...