R difftime减去2天

时间:2016-08-02 20:04:54

标签: r difftime

我有一些从Python导出的timedelta字符串。我试图导入它们用于R,但我得到了一些奇怪的结果。

当timedeltas很小时,我得到的结果是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

1 个答案:

答案 0 :(得分:1)

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

我的解决方案是将对象转换为字符串并提取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 

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