I持って自分のデータフレームに次のコラム:機能:データポイント間の秒を計算
DateTime
1 2011-10-03 08:00:04
2 2011-10-03 08:00:05
3 2011-10-03 08:00:06
4 2011-10-03 08:00:09
5 2011-10-03 08:00:15
6 2011-10-03 08:00:24
7 2011-10-03 08:00:30
8 2011-10-03 08:00:42
9 2011-10-03 08:01:01
10 2011-10-03 08:01:24
11 2011-10-03 08:01:58
12 2011-10-03 08:02:34
13 2011-10-03 08:03:25
14 2011-10-03 08:04:26
15 2011-10-03 08:06:00
dput
付:
> dput(smallDF)
structure(list(DateTime = structure(c(1317621604, 1317621605,
1317621606, 1317621609, 1317621615, 1317621624, 1317621630, 1317621642,
1317621661, 1317621684, 1317621718, 1317621754, 1317621805, 1317621866,
1317621960, 1317622103, 1317622197, 1317622356, 1317622387, 1317622463,
1317622681, 1317622851, 1317623061, 1317623285, 1317623404, 1317623498,
1317623612, 1317623849, 1317623916, 1317623994, 1317624174, 1317624414,
1317624484, 1317624607, 1317624848, 1317625023, 1317625103, 1317625179,
1317625200, 1317625209, 1317625229, 1317625238, 1317625249, 1317625264,
1317625282, 1317625300, 1317625315, 1317625339, 1317625353, 1317625365,
1317625371, 1317625381, 1317625395, 1317625415, 1317625423, 1317625438,
1317625458, 1317625469, 1317625487, 1317625500, 1317625513, 1317625533,
1317625548, 1317625565, 1317625581, 1317625598, 1317625613, 1317625640,
1317625661, 1317625674, 1317625702, 1317625715, 1317625737, 1317625758,
1317625784, 1317625811, 1317625826, 1317625841, 1317625862, 1317625895,
1317625909, 1317625935, 1317625956, 1317625973, 1317626001, 1317626043,
1317626062, 1317626100, 1317626113, 1317626132, 1317626153, 1317626179,
1317626212, 1317626239, 1317626271, 1317626296, 1317626323, 1317626361,
1317626384, 1317626407), class = c("POSIXct", "POSIXt"), tzone = "")), .Names = "DateTime", row.names = c(NA,
-100L), class = "data.frame")
私の目標:私は時間差を計算したい、各測定間に秒単位で表示されます。
編集: 私はその日の最初の値を以外の各データポイント間の時間(秒)差が計算され、次の結果、を取得するために探しています(3行目)
DateTime Seconds
1 2011-09-30 21:59:02 6
2 2011-09-30 21:59:04 2
3 2011-10-03 08:00:04 4
4 2011-10-03 08:00:05 1
5 2011-10-03 08:00:06 1
6 2011-10-03 08:00:09 3
7 2011-10-03 08:00:15 5
8 2011-10-03 08:00:24 9
9 2011-10-03 08:00:30 6
10 2011-10-03 08:00:42 12
11 2011-10-03 08:01:01 19
12 2011-10-03 08:01:24 23
13 2011-10-03 08:01:58 34
14 2011-10-03 08:02:34 36
15 2011-10-03 08:03:25 51
16 2011-10-03 08:04:26 61
17 2011-10-03 08:06:00 94
しかし、測定値は午前8時からの相対秒数、その日の最初であるかのように、午前8:00に開始します、時が午前8に対して計算され計算する必要があります。上記の例では、最初の測定が8:00:04に終了するので、$sec
という属性を使用するとPOSIX
が有効ですが、他の日には8:00時から数分後に最初の値が発生する可能性があります。
SecondsInBar <- function(x, startTime){
# First data point or first of day
if (x == 1 || x > 1 && x$wkday != x[-1]$wkday){
seconds <- as.numeric(difftime(x,
as.POSIXlt(startTime, format = "%H:%M:%S"),
units = "secs"))
# else calculate time difference
} else {
seconds <- as.numeric(difftime(x, x[-1], units = "secs"))
}
return (seconds)
}
その後、SecondsInBar(smallDF$DateTime, "08:00:00")
で呼び出すことができます。
私は次の関数でその目標を達成しようとしました。
あり、この機能を有する少なくとも2つの問題があるが、私はこれらを解決する方法がわからない:
$ operator is invalid for atomic vectors
エラーを返しx$wkday != x[-1]$wkday
コードセグメント、- そして
as.POSIXlt(startTime, format = "%H:%M:%S")
は 電流を使用しています日付は、difftime
の計算に誤りがあります。
私の質問:私は、この関数で間違っつもり を? :このアプローチは実行可能な方法ですか、別の角度からアプローチするべきですか?
該当する日の午前8時から午前8時までの間に、 – James
あなたは明確にすることができます:日付と時刻を数値に変換するのは難しくないので、 '2011-10-03 08:00:00'のように変換してから数を減算する必要がありますか?その日の他の(変換された)日時値? –
@James:申し訳ありませんが、私はそれをより明確にすべきでした。私はそれぞれのポイントの違いを探していますが、ポイントがその日の最初のときに_except_してから、午前8時に使用します。 – Jura25