gpt4 book ai didi

r - 在 R 中找到第一个长度为 n 的序列

转载 作者:行者123 更新时间:2023-12-04 12:11:12 25 4
gpt4 key购买 nike

假设我有这样一个 data.frame

df <- data.frame(signal = c(0, 0, 1, 0, 1, 1, 0, 1, 1, 1))

通过连续 n 次的数字找到第一个信号的最佳方法是什么。例如,如果 n = 1 那么我的信号将是第三个元素,我想得到这样的答案:
c(0, 0, 1, 0, 0, 0, 0, 0, 0, 0)

对于 n=2,答案是:
c(0, 0, 0, 0, 0, 1, 0, 0, 0, 0)

对于 n=3,最后一个元素是连续 3 个之后的信号:
c(0, 0, 0, 0, 0, 0, 0, 0, 0, 1)

最佳答案

第一 1signal的轧制产品中窗口大小=n 是信号的开始,所以

f <- function(x, n){
y <- numeric(length(x))
k <- RcppRoll::roll_prod(x, n)
y[which(k==1)[1] + n-1] <- 1
y
}

> f(df$signal, 1)
[1] 0 0 1 0 0 0 0 0 0 0
> f(df$signal, 2)
[1] 0 0 0 0 0 1 0 0 0 0
> f(df$signal, 3)
[1] 0 0 0 0 0 0 0 0 0 1

健全性检查
set.seed(1)
signal <- sample(0:1, 10, TRUE)
signal
# [1] 0 0 1 1 0 1 1 1 1 0
f(signal, 3)
# [1] 0 0 0 0 0 0 0 1 0 0
g(signal, 3)
# [1] 1 0 0 0 0 0 0 0 0 0
fun(signal, 3)
Error in 1:which(r$len * r$val == n)[1] : NA/NaN argument

关于r - 在 R 中找到第一个长度为 n 的序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36017364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com