r - 在数据框中查找重复项并更改识别值
问题描述
我可能陷入了一个愚蠢且易于解决的问题。
我有一个触发器,当计算机键被按下(和)时代码为 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 以结束预处理阶段。对你的帮助表示感谢。
真诚的你,
解决方案
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
。
推荐阅读
- ios - Swift:如何存储数组数据,以便下课后可以多次访问?
- r - grid.Call.graphics 中的错误(C_polygon,x$x,x$y,index):“cluster”(包 Mclust)中的颜色名称无效
- python - 使用元组从字典中提取值
- python - API 教程中的 WinError 10054
- python - 替换数组列表中的元素?
- angular - 如果在 Material Autocomplete 中指定了错误的项目,如何处理
- ruby - 如何在ruby中打印类变量数组的元素
- c++ - 使用 string::insert(iterator it, char c) 的程序中的运行时错误
- storybook - 附加文档的故事书/HTML
- html - 正则表达式查找 XML 输入是否包含 HTML 元素列表