【问题标题】:R - find certain values in table and sort with conditionR - 在表中查找某些值并按条件排序
【发布时间】:2019-09-19 10:33:57
【问题描述】:

我有一个看起来像这样的 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

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

【问题讨论】:

标签: r sorting filter conditional-statements


【解决方案1】:

从你上面所说的 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

【讨论】:

  • 我目前收到以下错误: 行[行,] 中的错误:维数不正确。这可能是因为有时触发发生在测试期 1 中吗?在这种情况下,我们不能减去 1 行,但会保持原样。或者如果触发器发生在测试周期 2 中,那么我们只需要减去 1 行?在这种情况下 group_by(Subject) 会有所帮助吗?到目前为止,感谢您的帮助,我永远不会想出这个 =)
猜你喜欢
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 2012-06-03
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多