2016-12-20 6 views
1

サッカーのイベントのタイミングを含むデータセットがあります。試合は60分を超え、私は間隔を計算しようとしています。これは私が持っているデータである。60分を超える時間の減算

data <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39") 

私の問題では分が(彼らは0と90分間とすることができる)60を超えているという事実から生じます。だから、基本的に、私は、イベント間の間隔をプリントアウトするコードをしたいと思います:

"6:13", "8:07", "13:43",..., "3:17" 

時間にデータを変換し、そこから行く方が良いでしょうか?ちょっと考えました。私は他の質問を見てきましたが、Rのために求められていたものは見つかりませんでした。それがあって、それを逃した場合、批判することは自由ですが、私には重複してください。

ありがとうございます!

答えて

2

この種のものには、潤滑油を調べてください。

あり、それを行うための簡単な方法は、おそらくですが、これは動作します:

library(lubridate) 
data <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39") 
out <- seconds_to_period(diff(as.numeric(ms(data))) 

あなたの代わりに期間、使用はsprintfの書式設定された文字列として出力したい場合:

sprintf('%02d:%02d', minute(out), second(out)) 
1

これかもしれないが仕事も

data1 <- c("11:14", "17:27", "25:34", "39:17", "39:59", "42:32", "50:15", "50:53", "64:22", "67:39") 
data2 = sapply(strsplit(data1,":"), # from http://stackoverflow.com/a/5187350/7128934 
       function(x) { 
        x <- as.numeric(x) 
        x[1]+x[2]/60 
       } 
) 

difference = list() 
for (i in 1: (length(data1) - 1)) { 
difference[i] = data2[i+1] - data2[i] 
} 
+0

秒の差を計算する関連する方法は 'secDiffs < - で差分(sapply(strsplit(データ、スプリット= ":")、関数(x)の和(as.integer(X)* C(60L 、1L)))))。 – lmo

0

as.difftimeを使用して明示的にユニットを指定しようとします。

out <- diff(sapply(strsplit(data, ":"), function(x) 
    Reduce(`+`, Map(as.difftime, as.numeric(x), units=c("mins","secs")))) 
) 

# time difference in seconds 
out 
#[1] 373 487 823 42 153 463 38 809 197 

# formatted string 
sprintf("%d:%02d", out %/% 60, out %% 60) 
#[1] "6:13" "8:07" "13:43" "0:42" "2:33" "7:43" "0:38" "13:29" "3:17" 
関連する問題