按组比较特定条件下的连续行

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

对于每个参与者和每个试验,我需要检查CURRENT_ID中所有连续的行,第一行在A列中的值为0,最后一行在B列中的值为0。条件满足,我希望新列C中的值为0,否则,我希望值为1。

如果您有任何建议,我将不胜感激。

这是数据的一些示例行:

head(mydf, 10)

#> # A tibble: 10 x 6
#>        A     B participant trial CURRENT_ID     C
#>    <dbl> <dbl> <chr>       <dbl>      <dbl> <dbl>
#>  1     0     1 ppt01          45          3     0
#>  2     1     0 ppt01          45          4     0
#>  3     0     1 ppt01          45         10     0
#>  4     0     0 ppt01          45         11     0
#>  5     1     0 ppt01          45         12     0
#>  6     0     1 ppt01          87          2     0
#>  7     1     0 ppt01          87          3     0
#>  8     1     1 ppt01          87          4     1
#>  9     1     1 ppt01          87          5     1
#> 10     0     1 ppt01          34          6     0

我需要为每个参与者和试验考虑每对连续的行(基于CURRENT_ID的值连续)。在上面的示例中,第8行和第9行在新列C中的值为1,因为第8行在A列中的值为1(而不是0),而第9行在B列中的值为1(而不是0)。] >

这里有一个示例,如何比较参与者ppt01和试验87的行

    A   B    participant   trial   CURRENT_ID      C

    0   1    ppt01         87      2               0
    1   0    ppt01         87      3               0

    1   0    ppt01         87      3               0
    1   1    ppt01         87      4               1

    1   1    ppt01         87      4               1
    1   1    ppt01         87      5               1

数据:

mydf <- structure(list(A = c(0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 
1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 
1, 1), B = c(1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 
0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1
), participant = c("ppt01", "ppt01", "ppt01", "ppt01", "ppt01", 
"ppt01", "ppt01", "ppt01", "ppt01", "ppt01", "ppt01", "ppt01", 
"ppt01", "ppt01", "ppt01", "ppt01", "ppt01", "ppt01", "ppt01", 
"ppt01", "ppt01", "ppt02", "ppt02", "ppt02", "ppt02", "ppt02", 
"ppt02", "ppt02", "ppt02", "ppt02", "ppt02", "ppt02", "ppt02", 
"ppt02", "ppt02", "ppt02", "ppt02"), trial = c(45, 45, 45, 45, 
45, 87, 87, 87, 87, 34, 34, 34, 34, 34, 34, 8, 8, 8, 8, 8, 8, 
87, 87, 87, 87, 55, 55, 55, 55, 55, 55, 22, 22, 22, 22, 22, 22
), CURRENT_ID = c(3, 4, 10, 11, 12, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
11, 5, 6, 9, 10, 11, 12, 2, 3, 4, 5, 5, 6, 9, 10, 11, 12, 2, 
3, 4, 10, 11, 12), C = c(0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 
1, 0, 1, 1)), class = c("spec_tbl_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -37L), spec = structure(list(cols = list(
    A = structure(list(), class = c("collector_double", "collector"
    )), B = structure(list(), class = c("collector_double", "collector"
    )), participant = structure(list(), class = c("collector_character", 
    "collector")), trial = structure(list(), class = c("collector_double", 
    "collector")), CURRENT_ID = structure(list(), class = c("collector_double", 
    "collector")), C = structure(list(), class = c("collector_double", 
    "collector"))), default = structure(list(), class = c("collector_guess", 
"collector")), skip = 1), class = "col_spec"))

对于每个参与者和每个试验,我需要检查CURRENT_ID中所有连续的行,第一行在A列中的值为0,最后一行在B列中的值为0。 。

r conditional-statements
2个回答
2
投票

如果您希望将成对的AB分组到参加者试验的组中,则应该可以:


0
投票

[一个老问题,但仍然有意义,尚未得到公认的答案!

© www.soinside.com 2019 - 2024. All rights reserved.