R difftime 减去 2 天

R difftime subtracts 2 days

我有一些从 Python 导出的时间增量字符串。我正在尝试导入它们以便在 R 中使用,但我得到了一些奇怪的结果。

当时间增量较小时,我得到的结果会相差 2 天,例如:

> as.difftime('26 days 04:53:36.000000000',format='%d days %H:%M:%S.000000000')

Time difference of 24.20389 days

当它们变大时,它根本不起作用:

> as.difftime('36 days 04:53:36.000000000',format='%d days %H:%M:%S.000000000')
Time difference of NA secs

我还阅读了 'R' 我用 'Python' 处理过的一些时间增量对象,并且 26 days 04:53:36.000000000 格式也有类似的问题。正如 Gregor 所说,strptime 中的 %d 是一个月中的第几天,作为零填充的十进制数,因此不适用于 >31 的数字,并且似乎没有累积天数的选项(可能是因为 strptime 用于日期时间对象而不是时间增量对象)。

我的解决方案是按照 Gregor 的建议将对象转换为字符串并提取数值数据,我使用 gsub 函数完成了此操作。

# convert to strings
data$tdelta <- as.character(data$tdelta)
# extract numerical data
days <- as.numeric(gsub('^.*([0-9]+) days.*$','\1',data$tdelta))
hours <- as.numeric(gsub('^.*ys ([0-9]+):.*$','\1',data$tdelta))
minutes <- as.numeric(gsub('^.*:([0-9]+):.*$','\1',data$tdelta))
seconds <- as.numeric(gsub('^.*:([0-9]+)..*$','\1',data$tdelta))
# add up numerical components to whatever units you want
time_diff_seconds <- seconds + minutes*60 + hours*60*60 + days*24*60*60
# add column to data frame
data$tdelta <- time_diff_seconds 

这应该允许您使用时差进行计算。希望有所帮助。