【问题标题】:How to calculate difference between two timestamp columns depending on value of third column?如何根据第三列的值计算两个时间戳列之间的差异?
【发布时间】:2021-07-27 11:49:52
【问题描述】:

我有一个数据框:

col1                                      col2               col3
2019-04-26 12:37:11.52000      2019-04-27 12:37:11.52000          2
2019-04-28 12:37:11.52000      2019-04-30 12:37:11.52000          1
2019-05-03 12:37:11.52000      2019-05-08 12:37:11.52000          2
NA                             2019-05-08 12:37:11.52000          2

我想创建新列作为 col2 和 col1 的差异。我将使用 difftime 功能。但是,我希望只有在 col3 中的该行值为 2 时才有值。否则它必须是 NA。所以,想要的结果是:

col1                                      col2                  col3    diff
2019-04-26 12:37:11.52000      2019-04-27 12:37:11.52000          2      1
2019-04-28 12:37:11.52000      2019-04-30 12:37:11.52000          1      NA
2019-05-03 12:37:11.52000      2019-05-08 12:37:11.52000          2      5
NA                             2019-05-08 12:37:11.52000          2      NA

如何做到这一点?那个条件怎么加?

【问题讨论】:

    标签: r dataframe timestamp


    【解决方案1】:

    您可以使用NA 初始化结果列,并仅对具有col3 == 2 的值进行差分。

    df$diff <- NA
    inds <- df$col3 == 2
    df$diff[inds] <- as.numeric(difftime(df$col2[inds], df$col1[inds], "days"))
    

    dplyr 管道中,您可以使用 -

    library(dplyr)
    
    df %>%
      mutate(diff = if_else(col3 == 2, as.numeric(difftime(col2, col1, 'days')), NA_real_))
    

    【讨论】:

    • 哇,很酷的解决方案。是否有可能在管道中进行?
    • 为什么是NA_real_ 而不仅仅是NA
    • if_else from dplyr 是类型严格的,这意味着它需要相同类型的 if 和 else 输出。 NA 是逻辑 (class(NA)) 而NA_real 是数字 (class(NA_real_))。
    【解决方案2】:

    你可以使用 dplyr。

    dfnew <- df%>%
              mutate(diff = NA)%>%
              filter(col3 == "2")%>%
              mutate(diff = difftime(col2,col1, units = "auto"))
         
    

    【讨论】:

      猜你喜欢
      • 2020-05-13
      • 2021-05-04
      • 2014-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多