R - 在表中找到某些值并按条件排序

问题描述 投票:-2回答:1

我有一个DF看起来像这样(但实际上有更多的数据!):

https://imgur.com/OoGxNG8.jpg

我试图查看每个主题并确定“触发器”切换到1,2或3之前的“条件”是什么。具体来说,我试图在“触发器”之前创建一个包含三个“Condtitions”的信息的新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

我已经试图解决这个问题好几个星期,但我太没经验了。我很感激任何帮助。

r sorting filter condition
1个回答
0
投票

从你上面所说的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
© www.soinside.com 2019 - 2024. All rights reserved.