【发布时间】:2017-11-17 03:43:36
【问题描述】:
对于每个参与者和每个试验,我需要检查 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"))
【问题讨论】:
-
您是否尝试通过
participant和/或trial执行此操作?您是否也尝试对CURRENT_ID的连续值执行此操作? -
数据中提供的 C 列是否正确 - 为什么第 8,9 行会得到 1 - 与我的描述不匹配!?
-
@akash87 我需要考虑每个参与者和试验的 CURRENT_ID 的连续值。
-
@BigDataScientist 我添加了一个编辑来更好地解释为什么第 8 行和第 9 行在 C 中的值为 1。
-
那么为什么在当前行中
A = 0和B=0上方的行时,试用22有C=1。