Добавить значения индикатора в столбец времени до и после 10 секунд - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть столбец data.frame, который выглядит следующим образом

       a$`1`
1   1316.100
2      0.200
3    131.600
4      0.500
5     49.600
6      0.500
7    183.100
8      0.200
9   1307.100
10     0.200
11     2.100
12    12.100
13     8.100
14   649.100
15     0.200
16   503.600
17     0.500
18   231.100
19     0.200
20  2527.600
21     0.500
22    90.100
23     0.200

Числа перед десятичными числами - это секунды * 100.Число после десятичной дроби является значением индикатора.Я работаю над заданием выбора с фиксированным соотношением.При этом может произойти правильный выбор (отмеченный «.100») или неправильный выбор (отмеченный «.600» и за которым всегда следует «0.500»).Если выбран правильный выбор и выдается вознаграждение (помеченное «.100», а затем «0.200»), то наступает период ожидания в течение 10 секунд.В течение этого времени можно сделать выбор (помеченный как «.100» или «.600» / «0.500»), но вознаграждение не предоставляется до тех пор, пока не истечет период ожидания.

Проблема в том, что у меня нет индикации того, когда истекло время ожидания.

Как добавить значения индикатора для периода ожидания?Например, поместите значение «0,700» после каждого значения «0.200», чтобы отметить начало тайм-аута.Затем поместите значение «0,800» через 10 секунд, чтобы отметить окончание тайм-аута.

Редактировать: Я думаю, что для LOP пригодится здесь?Я хочу суммировать значения после каждого значения 0.200.Как только сумма значений строки превысит 10 секунд, поместите значение 0,800, а затем перейдите к следующему значению 0,200.Наконец, после каждых 0.200 ставьте 0,700.0,700 отметит начало тайм-аута, а 0,800 отметит остановку тайм-аута (10 секунд).Вот как должна выглядеть моя колонка ...

a$`1`
1316.100
0.200
0.700
131.600
0.500
49.600
0.500
0.800
183.100
0.200
0.700
0.800
1307.100
0.200
0.700
2.100
12.100
8.100
0.800
649.100
0.200
0.700
0.800
503.600
0.500
231.100
0.200
0.700
0.800
2527.600
0.500
90.100
0.200

1 Ответ

0 голосов
/ 24 сентября 2019

Поскольку ваш вопрос все еще немного размыт, я попытаюсь показать вам, как, по моему мнению, вы могли бы сделать это более R-подобным образом.

Вот начальный кадр данныхиз того, что вы указали:

library(tidyverse)
library(stringr)

df1 <- structure(list(V1 = 1:23, V2 = c(1316.1, 0.2, 131.6, 0.5, 49.6, 
0.5, 183.1, 0.2, 1307.1, 0.2, 2.1, 12.1, 8.1, 649.1, 0.2, 503.6, 
0.5, 231.1, 0.2, 2527.6, 0.5, 90.1, 0.2)), class = "data.frame", row.names = c(NA, 
-23L))

Сначала давайте пометим каждый запуск тайм-аута, а затем создадим переменную группировки, которая группирует каждый раз при запуске нового тайм-аута:

df1 <- df1 %>% mutate(V3 = ifelse(grepl("\\.2$", V2), TRUE, FALSE), 
    TimeOutGroup = cumsum(V3)) 

Далее,давайте вытянем компонент секунд из V2 в его собственный столбец и вычислим время, прошедшее в каждой группе.

df1 <- df1 %>% group_by(TimeOutGroup ) %>% 
    mutate(Seconds = as.numeric(gsub("(^\\d+)?\\..*", "\\1",V2))/100, 
    Time_Elapsed = cumsum(Seconds))

Дает нам следующее:

# A tibble: 23 x 6
# Groups:   TimeOutGroup [7]
      V1     V2 V3    TimeOutGroup Seconds Time_Elapsed
   <int>  <dbl> <lgl>        <int>   <dbl>        <dbl>
 1     1 1316.  FALSE            0   13.2         13.2 
 2     2    0.2 TRUE             1    0            0   
 3     3  132.  FALSE            1    1.31         1.31
 4     4    0.5 FALSE            1    0            1.31
 5     5   49.6 FALSE            1    0.49         1.8 
 6     6    0.5 FALSE            1    0            1.8 
 7     7  183.  FALSE            1    1.83         3.63
 8     8    0.2 TRUE             2    0            0   
 9     9 1307.  FALSE            2   13.1         13.1 
10    10    0.2 TRUE             3    0            0   

Теперь нам нужноподумать о том, каково наше условие окончания времени ожидания, и действительно ли оно должно быть отдельной строкой.

Мы можем определить End как любую строку, в которой общее время, прошедшее с начала> 10, илигде следующее значение равно NA (что означает отсутствие последующих значений до нового запуска).И затем мы можем добавить Start в этот столбец:

df1 %>% mutate(Status = ifelse(Time_Elapsed > 10 | is.na(lead(Time_Elapsed)), "End", ""), 
    Status = ifelse(V3 == TRUE, "Start", Status))

Это дает нам такую ​​таблицу, где мы пометили Start и End, без добавления каких-либо строк:

# A tibble: 23 x 7
# Groups:   TimeOutGroup [7]
      V1     V2 V3    TimeOutGroup Seconds Time_Elapsed Status
   <int>  <dbl> <lgl>        <int>   <dbl>        <dbl> <chr> 
 1     1 1316.  FALSE            0   13.2         13.2  End   
 2     2    0.2 TRUE             1    0            0    Start 
 3     3  132.  FALSE            1    1.31         1.31 ""    
 4     4    0.5 FALSE            1    0            1.31 ""    
 5     5   49.6 FALSE            1    0.49         1.8  ""    
 6     6    0.5 FALSE            1    0            1.8  ""    
 7     7  183.  FALSE            1    1.83         3.63 End   
 8     8    0.2 TRUE             2    0            0    Start 
 9     9 1307.  FALSE            2   13.1         13.1  End   
10    10    0.2 TRUE             3    0            0    Start 

Надеюсь, это полезно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...