2016-07-07 29 views
0

我的實驗包括通過兩個不同的測量系統測量一個因變量(距離),在10次演習(試驗)期間。有多個參與者(名稱)。我對每個系統如何測量距離感興趣。但是,這兩個系統對於每個鑽具具有不同的採樣率和完成時間。如何根據另一個的長度來匹配和修剪data.frame?

一個data.frame命名爲「準則」的結構如下:

Source: local data frame [5 x 6] 
Groups: Name, Trial [1] 

     Trial Name Sample Measure Time Distance 
     (fctr) (fctr) (int) (fctr) (dbl)  (dbl) 
1 D5_Sprint1 RUTH  1 CRITE 0.005   NA 
2 D5_Sprint1 RUTH  2 CRITE 0.010 0.003429569 
3 D5_Sprint1 RUTH  3 CRITE 0.015 0.003933275 
4 D5_Sprint1 RUTH  4 CRITE 0.020 0.004403281 
5 D5_Sprint1 RUTH  5 CRITE 0.025 0.004826486 

另外,「實用」如下:

Source: local data frame [5 x 6] 
Groups: Name, Trial [1] 

     Trial Name Sample Measure  Distance Time 
     (chr) (chr) (dbl) (chr)  (dbl) (dbl) 
1 D1_Sprint1 MARK  1 PRAC   NA 0.01 
2 D1_Sprint1 MARK  2 PRAC 0.0012041589 0.02 
3 D1_Sprint1 MARK  3 PRAC   NA 0.03 
4 D1_Sprint1 MARK  4 PRAC 0.0009219522 0.04 
5 D1_Sprint1 MARK  5 PRAC 0.0012165535 0.05 

我能夠找到每個試用期結束時間,每個名稱和相關行號使用以下代碼:

PracticalDrillTimes <- Practical %>% 
    mutate(Row = seq_along(Time)) %>% 
    group_by(Name, Trial) %>% slice(n()) 

Source: local data frame [5 x 7] 
Groups: Name, Trial [5] 

     Trial Name Sample Measure Distance Time Row 
     (chr) (chr) (dbl) (chr)  (dbl) (dbl) (int) 
1 D1_Sprint1 RUTH 656 PRAC 0.015959010 6.56 656 
2 D1_Sprint1 MARK 576 PRAC 0.014603082 5.76 576 
3 D1_Sprint2 RUTH 651 PRAC 0.005423099 6.51 651 
4 D1_Sprint2 MARK 746 PRAC 0.021403738 7.46 746 
5 D1_Sprint5 RUTH 621 PRAC 0.032652871 6.21 621 

我重複ab用於Criterion數據集。

Source: local data frame [5 x 7] 
Groups: Name, Trial [5] 

     Trial Name Sample Measure Time  Distance Row 
     (fctr) (fctr) (int) (fctr) (dbl)  (dbl) (int) 
1 D1_Sprint1 RUTH 1041 CRITE 5.205 0.0002099668 1041 
2 D1_Sprint1 MARK 944 CRITE 4.720 0.0002195038 944 
3 D1_Sprint2 RUTH 985 CRITE 4.925 0.0002437823 985 
4 D1_Sprint2 MARK 977 CRITE 4.885 0.0002515801 977 
5 D1_Sprint3 RUTH 1149 CRITE 5.745 0.0002597051 1149 

我現在想修剪實用data.frame,較短鑽長度與該標準相匹配,這樣既訓練是相同的長度。例如,在實用版中修剪Ruth的6.56秒長度鑽頭以匹配5.205長度。

我有每次鑽頭結束的時間,但我如何有效地匹配和修剪實際data.frame適當的鑽頭長度?

我知道我可以使用子集或刪除特定的行,但是,這兩個data.frame s是> 100,000行的長度,所以快速解決方案將是理想的。謝謝!

回答

1

如果我的理解正確,您希望通過刪除每個Name x Trial的時間(Time_Practical,爲了清晰)大於max(Time_Criterion)的行來修剪Practical。代替處理行號,一種方法是總結每個名稱x試用組合的最大值(時間),然後如下加入和過濾:

CriterionDrillTimes <- Criterion %>% 
    group_by(Name, Trial) %>% 
    summarize(MaxTimeCriterion = max(Time)) 

PracticalJoin <- Practical %>% 
    left_join(CriterionDrillTimes, by = c('Name', 'Trial')) %>% 
    filter(Time <= MaxTimeCriterion) 
相關問題