【问题标题】:Error "longer object length is not a multiple of shorter object length" when using difftime使用 difftime 时出现错误“较长的对象长度不是较短对象长度的倍数”
【发布时间】:2020-07-03 21:11:27
【问题描述】:

我用下面的代码计算两个连续行的秒差

set.seed(79)

library(outbreaks)
library(lubridate)

# Import data
disease_df <- measles_hagelloch_1861[, 3, drop = FALSE]

# Generate a random time for each day
disease_df$time <- sample(1:86400, nrow(disease_df), replace = TRUE)
disease_df$time <- hms::as.hms(disease_df$time)

# Combine date and time
disease_df$time1 <- with(disease_df, ymd(date_of_prodrome) + hms(time))

# Sort data
disease_df <- disease_df[order(disease_df$time1), ]

# Difference in days of two consecutive row
disease_df$diff <- as.numeric(difftime(disease_df$date_of_prodrome,
                                       dplyr::lag(disease_df$date_of_prodrome, 1), units = 'days'))

# Difference in seconds of two consecutive row
disease_df$diff1 <- as.numeric(difftime(disease_df$time1,
                                       dplyr::lag(disease_df$time1, 1), units = 'secs'))

这是结果数据框

和错误消息longer object length is not a multiple of shorter object length

您能否解释一下为什么difftime 可以在几天内正常工作,但会导致几秒钟内出错?非常感谢!

【问题讨论】:

    标签: r datetime datediff


    【解决方案1】:

    显然dplyrdplyr::lag(disease_df$time1, 1) 这行不满意,因为disease_df$time1 的格式。

    将其转换为 POSIXct 有效,因此只需更新这部分代码:

    # Combine date and time and convert to POSIXct
    disease_df$time1 <- as.POSIXct(with(disease_df, ymd(date_of_prodrome) + hms(time)))
    

    【讨论】:

      【解决方案2】:

      time1 列的类型为 "POSIXlt"。我不太确定为什么 difftimeunits = 'secs' 不起作用,但如果将其转换为 POSIXct,它可以正常工作而不会出现任何错误。

      disease_df$time1 <- as.POSIXct(disease_df$time1)
      disease_df$diff1 <- as.numeric(difftime(disease_df$time1,
                                     dplyr::lag(disease_df$time1, 1), units = 'secs'))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-07-15
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多