R将二进制向量中的块修剪为仅第一个元素

时间:2016-06-30 02:34:51

标签: r dataframe

假设我有一个像这样的二进制矢量(作为数据帧中的一列):

000001111111000111100000001111000011111

我想取每个1的块,并用0代替整个块只保留1的第一个实例:

000001000000000100000000001000000010000

目前我正在使用我认为非常低效的方法来做这个,并且该方法只是部分完成。我循环遍历数据帧的每一行并检查块开始,然后将与起始1相关的索引/时间存储在新数据帧中:

stepStarts = data.frame()
for (i in 2:nrow(df)) {
  if(df$step[i] == 1 & df$step[i-1] == 0){
    stepStarts <- rbind(stepStarts, data.frame(trialNum = df$trialNum[i], stepTime = df$time[i]))
  }
}

有没有更好的方法来实现这一点,而无需循环数据框,并将时间存储在新的数据框中(我只想替换现有的列)?

1 个答案:

答案 0 :(得分:1)

我们可以找到向量的差异并标记正向变化,指示0导致1:

res <- c(0,diff(x)==1)

检查答案:

ans <- "000001000000000100000000001000000010000"
ans2 <- paste(res, collapse="")
all.equal(ans, ans2)
#[1] TRUE