首页 > 解决方案 > 根据特定列值更改后续数据,并且仅在其发生的试验期间更改

问题描述

如果该试验包含 1(1 和 0 是唯一可能的值),我正在尝试在试验期间做我认为“向前填充”的事情。这是一组示例数据,其中第一次试验中有一些注视 (=1),而在第二次试验中没有:

trial      fixation
  1           0
  1           0
  1           1
  1           1
  1           0
  1           0
  1           0
  1           0
  2           0
  2           0
  2           0
  2           0
  2           0
  2           0

因此,当函数找到 1 值时,它应该只用 1填充该试验的固定列的其余部分:

trial      fixation
  1           0
  1           0
  1           1
  1           1
  1           1
  1           1
  1           1
  1           1
  2           0
  2           0
  2           0
  2           0
  2           0
  2           0

有没有人有办法做到这一点(最好使用data.table::rleiddplyr)?

非常感谢!

标签: r

解决方案


我们需要cummax分组“审判”

library(dplyr)
df1 <- df1 %>%
    group_by(trial) %>%
    mutate(fixation = cummax(fixation)) %>%
    ungroup

-输出

# A tibble: 14 x 2
   trial fixation
   <int>    <int>
 1     1        0
 2     1        0
 3     1        1
 4     1        1
 5     1        1
 6     1        1
 7     1        1
 8     1        1
 9     2        0
10     2        0
11     2        0
12     2        0
13     2        0
14     2        0

正如cummaxfrom一样base R,我们也可以使用base R方法

df1$fixation <-  with(df1, ave(fixation, trial, FUN = cummax))

数据

df1 <- structure(list(trial = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L), fixation = c(0L, 0L, 1L, 1L, 0L, 0L, 0L, 
0L, 0L, 0L, 0L, 0L, 0L, 0L)), class = "data.frame", row.names = c(NA, 
-14L))

推荐阅读