【问题标题】:Using Difftime function on Multiple columns of two DataFrames in R在R中两个DataFrame的多列上使用Difftime函数
【发布时间】:2017-07-31 02:08:27
【问题描述】:

我有两个数据框,每个数据框都包含时间戳列,如下所示 图片:

Dataframe-1:

Dataframe-2:

我想求数据帧各列的时间差,例如:DF1的Column1各行与DF2的Column1各行的时间差。

我在上图中的每个数据框中只提到了三列,虽然我在原始数据集中的每一列中都有 257 列,但我目前正在单独使用以下命令找到差异:

diff_time_1<- difftime(df1$t1,df2$l1)
diff_time_2<- difftime(df1$t2,df2$l2)..so on

如果我尝试对所有 257 列执行此操作需要付出很多努力,我已经尝试了各种使用 apply 函数和 for 循环的方法,但它们似乎不起作用。

请帮助我找到一个解决方案,让我可以一次将difftime 函数应用于整个列。

【问题讨论】:

    标签: r difftime


    【解决方案1】:

    我们可以使用Map在'df1'、'df2'对应的列上应用difftime得到vectors的list

    Map(difftime, df1, df2)
    

    如果日期时间列只是列的子集,则将数据集子集并应用difftime

    Map(difftime, df1[subCols], df2[subCols])
    

    【讨论】:

      【解决方案2】:
      #DATA
      mydates = seq.POSIXt(from = as.POSIXct("1970-01-01"),
                           to = as.POSIXct("1970-12-01"), by = "hours")
      set.seed(42)
      df1 = data.frame(C1 = sample(mydates, 5), C2 = sample(mydates, 5))
      df2 = data.frame(C1 = sample(mydates, 5), C2 = sample(mydates, 5))
      

      如果df1df2 的维度相同,则可以减去以天为单位的差异

      df1 - df2
      #               C1              C2
      #1  152.70833 days -140.62500 days
      #2   72.79167 days  -80.70833 days
      #3 -216.58333 days    5.75000 days
      #4  192.00000 days   60.79167 days
      #5   59.91667 days   48.33333 days
      

      或者您可以使用sapply 遍历df1df2 的列以在difftime 中使用它们

      sapply(1:2, function(i) difftime(time1 = df1[,i], time2 = df2[,i], units = "hours"))
      #      [,1]  [,2]
      #[1,]  3665 -3375
      #[2,]  1747 -1937
      #[3,] -5198   138
      #[4,]  4608  1459
      #[5,]  1438  1160
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-06-15
        • 1970-01-01
        • 1970-01-01
        • 2022-11-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多