【问题标题】:Adding time differences to a series of files为一系列文件添加时差
【发布时间】:2019-03-27 16:08:46
【问题描述】:

我正在尝试创建一个函数,用于批处理 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 语句来添加如果 ID 和访问号码匹配的差异

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 秒。有没有办法做到这一点?

【问题讨论】:

    标签: r if-statement lubridate


    【解决方案1】:

    我认为这会有所帮助:

    # 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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-16
      • 2020-03-13
      相关资源
      最近更新 更多