2016-05-02 8 views
1

いくつかの条件を満たす列を持つ行と行の時間差を計算しようとしています。条件付きで行間の時間差を計算するR

いくつかのデータを読み込む:

my_data <- data.frame(criteria = c("some text", "some more text", " ", " ", "more text", " "), 
        timestamp = as.POSIXct(c("2015-07-30 15:53:15", "2015-07-30 15:53:47", "2015-07-30 15:54:48", "2015-07-30 15:55:48", "2015-07-30 15:56:48", "2015-07-30 15:57:49"))) 

     criteria   timestamp 
1  some text 2015-07-30 15:53:15 
2 some more text 2015-07-30 15:53:47 
3    2015-07-30 15:54:48 
4    2015-07-30 15:55:48 
5  more text 2015-07-30 15:56:48 
6    2015-07-30 15:57:49 

私は、基準列に空白ではなかったすべての行と最後の行の間(分)の時間差を取得したいです。そこで、私が欲しい:これまでのところ、私は認識するようにコードを構築しました

 criteria   timestamp time_diff 
1  some text 2015-07-30 15:53:15   0 
2 some more text 2015-07-30 15:53:47   0 
3    2015-07-30 15:54:48   1 
4    2015-07-30 15:55:48   2 
5  more text 2015-07-30 15:56:48   0 
6    2015-07-30 15:57:49   1 

をここで、「0」である必要があります - 私は、時間差を埋めるためのコードが必要です。ここに私のコードは次のとおりです。

my_data$time_diff <- ifelse (my_data$criteria != "", # Here's our statement 
    my_data$time_diff <- "0", # Here's what happens if statement is TRUE 
    my_data$time_diff <- NEED CODE HERE # if statement FALSE 
) 

私はこの仕事が良いifelse文でない何かによって行うことができるが、私は、私はQさんを見つけたR.

に比較的新しいだと感じていますここでは、個人が隣接する行(例えば、herehere)の間に時間差を得ようとしたが、この種の状況に対処しようとしている人をまだ見つけていない。

私が見つけたもっとも近い質問はthis oneですが、そのデータは個人がどのように処理したいのか(少なくとも私の立場から)は異なります。

編集:大文字のタイトル。

+1

各「タイムスタンプ」のためにあなたが 'cummax((my_dataの$基準で「タイムスタンプ」Sから時間差を必要とするようです="「)! * seq_len(nrow(my_data))) 'repsectively? –

+0

@alexis_laz、そうだと思います。何を意味するのかを明確にするために、各タイムスタンプ(「タイムスタンプ3」など)と、最も大きな行番号_タイムスタンプ3のタイムスタンプ(「my_data $ criteria!= "")のタイムスタンプを比較しています。その読みは正しいですか?そうなら、はい。 –

答えて

2

alexis_lazの見事な表現で答えを完了すると:

my_data <- data.frame(criteria = c("some text", "some more text", " ", " ", "more text", " "), 
         timestamp = as.POSIXct(c("2015-07-30 15:53:15", "2015-07-30 15:53:47", "2015-07-30 15:54:48", "2015-07-30 15:55:48", "2015-07-30 15:56:48", "2015-07-30 15:57:49"))) 

my_data$time_diff <- 
    my_data$timestamp - 
    my_data[cummax((my_data$criteria != " ") * seq_len(nrow(my_data))), 'timestamp'] 

my_data 

     criteria   timestamp time_diff 
1  some text 2015-07-30 15:53:15 0 secs 
2 some more text 2015-07-30 15:53:47 0 secs 
3    2015-07-30 15:54:48 61 secs 
4    2015-07-30 15:55:48 121 secs 
5  more text 2015-07-30 15:56:48 0 secs 
6    2015-07-30 15:57:49 61 secs 
+1

余分な注釈のように、 'difftime'も' units = "mins" '引数で便利です –

関連する問題