2016-08-02 2 views
1

私はPythonからエクスポートされたtimedelta文字列をいくつか持っています。 Rで使用するためにそれらをインポートしようとしていますが、私は奇妙な結果を得ています。R difftimeは2日を引く

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 
+0

http://stackoverflow.com/questions/12649641/calculating-time-difference-in-rを参照してください。つまり、ここで試しているように、文字列で日時計算を行うことはできません。 – tluh

+0

'?strptime'から、'%d 'は「*日数ではなく、10進数(01-31)。*」としての月の日です。私には解決策はありませんが、これは幾分かの動作を説明しています(31日以上で「NA」になります)。 – Gregor

+0

@tluh「difftime」オブジェクトに強制するだけで数学をやっていません。 – Gregor

答えて

1

私はまた、私は 'Python'で処理したいくつかの時間デルタオブジェクトを 'R'に読み込み、26 days 04:53:36.000000000フォーマットで同様の問題がありました。グレゴールが言っているように、strptimeの%dは、0で埋められた10進数の日であるため、31より大きい数値では機能しません。また、累積日数のオプションがないようです(おそらくstrptimeは日付時刻です時間デルタオブジェクトではない)。

私の解決策は、オブジェクトを文字列に変換し、グレゴールが提案したように数値データを抽出することでした。これを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 

これにより、時間差を使って計算を行うことができます。希望が役立ちます。

+0

ありがとう非常に - 私は非常に似た何かをやった – Jeremy

関連する問題