R - найти определенные значения в таблице и отсортировать по условию - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть DF, который выглядит следующим образом (но на самом деле с гораздо большим количеством данных!):

https://imgur.com/OoGxNG8.jpg

Я пытаюсь посмотреть на каждую тему и определить, какими были «условия» до того, как «триггер» переключился на 1,2 или 3. В частности, я пытаюсь создать новый DF с информацией, содержащей три «условия», прежде чем «триггер» превратится в 1,2 или 3.

if(df$Trigger >= 1){
  copie 3 rows before trigger (including row with trigger>=1) >= 1 of same Subject and delete rest.
}

Результат должен выглядеть следующим образом:

https://imgur.com/5gg5EYG.jpg

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

1 Ответ

0 голосов
/ 30 апреля 2019

Из того, что вы говорили выше, с утверждением if - это то, из чего я это снял.По сути, он находит, где происходят переключатели, находит три строки перед переключателем и включает его в FinalDF:

library(tidyverse)
df <- tibble::tribble(
    ~Subject, ~Testperiod, ~Condition, ~Trigger,
           1,           1,          0,        0,
           1,           2,          0,        0,
           1,           3,          1,        0,
           1,           4,          2,        0,
           1,           5,          3,        0,
           1,           6,          3,        1,
           1,           7,          1,        1,
           1,           8,          1,        1,
           1,           9,          0,        1,
           1,          10,          0,        1,
           1,          11,          0,        1,
           1,          12,          0,        0,
           2,           1,          0,        0,
           2,           2,          2,        0,
           2,           3,          3,        0,
           2,           4,          3,        0,
           2,           5,          3,        2,
           2,           6,          2,        2,
           2,           7,          1,        1,
           2,           8,          2,        1,
           2,           9,          0,        1,
           2,          10,          0,        0,
           2,          11,          0,        0,
           2,          12,          0,        0
    )

colchanges <- which(df$Trigger != dplyr::lag(df$Trigger))
ChangesDF <- cbind(rownum = colchanges,value = df[colchanges,"Trigger"])
rows <- dplyr::filter(ChangesDF,Trigger %in% c(1:3)) %>% select(rownum) %>% 
    mutate(One = rownum - 1,
           Two = rownum - 2,
           Three = rownum - 3)
rows <- sort(as.vector(t(rows)))
rows <- rows[rows > 0]

FinalDF <- df[rows,]
FinalDF
# A tibble: 12 x 4
   Subject Testperiod Condition Trigger
     <dbl>      <dbl>     <dbl>   <dbl>
 1       1          3         1       0
 2       1          4         2       0
 3       1          5         3       0
 4       1          6         3       1
 5       2          2         2       0
 6       2          3         3       0
 7       2          4         3       0
 8       2          4         3       0
 9       2          5         3       2
10       2          5         3       2
11       2          6         2       2
12       2          7         1       1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...