2017-09-13 9 views
0

私はいくつかの開始点と停止点の時間差を測定しようとしていますが、Var1の平均/ SDを取っています& Var2開始/停止期間。これらのテーブルは非常に長くなることができますが、これはサンプルです:開始と停止の間の時間遅延を測定し、平均/ sdを計算する方法

Status Time (s) Var1  Var2 
Start 0.05715238 0.7421875 -23.34501 
Cont 0.08572857 0.7226562 -34.24408 
Stop 0.11430476 0.703125 -34.24408 
Start 0.25718571 1.3867188 -28.01136 
Cont 0.2857619 1.3867188 -28.01136 
Stop 0.3143381 1.3867188 -42.92692 

私は開始と停止の変数でデータフレームをサブセット化により、時間を取得し、開始から終了時刻を減算することができます。しかし、これはVars 1と2の 'Cont'またはデータの継続を削除します。

Rでこの問題にアプローチする方法についての提案はありますか?開始および停止期間あたりの平均/ SDを生成するには?

私は私の結果は、この(P = /停止期間を開始する)ように見えるしたい:私はテーブルのこれらのタイプの多くを持っている、と私は1行にそれらのそれぞれを集計する

p1_mean_var1 p1_sd_var1 pe1_mean_var2 p1_sd_var2 p2_mean_var1 p2_sd_var1 p2_mean_var2 p2_sd_var2 
0.7226562333 0.01953125 -30.61105667 6.29258094 1.3867188  0   -32.9832133  8.61150258 

助けていただけたら幸いです!私はどこから始めてもわからない。

-etg

答えて

1

データを簡単な形式にすることをお勧めします。行がピリオドで並べられているという前提で作業しています。これをdata.frameに保存します。

measures <- read.table(header = TRUE, text = " 
Status Time  Var1  Var2 
Start 0.05715238 0.7421875 -23.34501 
Cont 0.08572857 0.7226562 -34.24408 
Stop 0.11430476 0.703125 -34.24408 
Start 0.25718571 1.3867188 -28.01136 
Cont 0.2857619 1.3867188 -28.01136 
Stop 0.3143381 1.3867188 -42.92692 
") 

library(dplyr) 
library(tidyr) 

start_indices <- which(measures[["Status"]] == 'Start') 

measures <- measures %>% 
    mutate(Period = findInterval(
    seq_along(Status), 
    start_indices 
)) 

measures 
# Status  Time  Var1  Var2 Period 
# 1 Start 0.05715238 0.7421875 -23.34501  1 
# 2 Cont 0.08572857 0.7226562 -34.24408  1 
# 3 Stop 0.11430476 0.7031250 -34.24408  1 
# 4 Start 0.25718571 1.3867188 -28.01136  2 
# 5 Cont 0.28576190 1.3867188 -28.01136  2 
# 6 Stop 0.31433810 1.3867188 -42.92692  2 

あなたはVar1Var2に同じことをしたいので、それは彼らに別の行を与え、一度に両方を処理する方が簡単です。これは任意の数の変数に簡単に拡張できます。

period_stats <- measures %>% 
    gather(key = "Variable", value = "Value", Var1, Var2) %>% 
    group_by(Period, Variable) %>% 
    summarise(
    Mean  = mean(Value), 
    StandDev = sd(Value), 
    Duration = max(Time) - min(Time) 
) 

period_stats 
# A tibble: 4 x 5 
# Groups: Period [?] 
# Period Variable  Mean StandDev Duration 
# <int> <chr>  <dbl>  <dbl>  <dbl> 
# 1  1  Var1 0.7226562 0.01953125 0.05715238 
# 2  1  Var2 -30.6110567 6.29258100 0.05715238 
# 3  2  Var1 1.3867188 0.00000000 0.05715239 
# 4  2  Var2 -32.9832133 8.61150258 0.05715239 
+0

ありがとうございます!私はdplyrの機能で遊んでいたが、整頓していなかった!魅力を発揮します。 – etgriffiths

関連する問題