首页 > 解决方案 > 在数据框中查找重复项并更改识别值

问题描述

我可能陷入了一个愚蠢且易于解决的问题。

我有一个触发器,当计算机键被按下(和)时代码为 1,当键被释放时代码为 0。我需要识别每个触发器的开始和停止(即第一个和最后一个 1)并将其间的 1 替换为 0。数据记录是时间(连续,t 下面)和值(皮肤电活动,值)。为了更快地处理数据,我需要对其进行预处理,即识别与感兴趣窗口的开头和结尾对应的 1。

请查找代码示例:

t <- seq(0.1,10,0.1)

value <- rnorm(length(t), mean=1, sd=2) 

trig <- c(rep(0,20),rep(c(rep(1,10), rep(0,10)),4))

id <- 1:length(t)

预期的输出是

trig_result <- c(rep(0,20), rep(c(1, rep(0,8),1,rep(0,10)),4)); length(trig_result)

使用重复只识别第一个和最后一个,而不是中间值。我看过类似的帖子,但没有一个能解决识别问题。

我研究了 dplyr 函数,但我不知道如何替换 0 中的 1 以结束预处理阶段。对你的帮助表示感谢。

真诚的你,

标签: rreplaceduplicates

解决方案


rle这是一个带有and的基本 R 解决方案cumsum

result <- rep(0,length(trig))
result[head(cumsum(rle(trig)$lengths)+c(1,0),-1)] <- 1
all.equal(result,trig_result)
#[1] TRUE

请注意,此解决方案假定数据以 开头和结尾0


推荐阅读