Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 查找大于x的连续响应_R - Fatal编程技术网

R 查找大于x的连续响应

R 查找大于x的连续响应,r,R,我试图找到一个点,在这个点上,参与者在一行中达到8个连续的回答,大于3。例如: x <- c(2,2,4,4,4,4,5,5,5,5,7) 上述代码的问题在于,只有当响应都相同且大于3时,它才起作用。因此,代码返回零 如果: x您可以只转换数据,以便对响应进行编码,以区分感兴趣的度量值(大于3),然后您的代码将工作,因为它将x替换为x1 x1 <- ifelse( x > 3, 4, 0 ) x13,4,0) 但是,如果我已经这样做了,我可能会以这种方式更清楚地重写代码

我试图找到一个点,在这个点上,参与者在一行中达到8个连续的回答,大于3。例如:

x <- c(2,2,4,4,4,4,5,5,5,5,7)
上述代码的问题在于,只有当响应都相同且大于3时,它才起作用。因此,代码返回零

如果:


x您可以只转换数据,以便对响应进行编码,以区分感兴趣的度量值(大于3),然后您的代码将工作,因为它将x替换为x1

x1 <- ifelse( x > 3, 4, 0 )
x13,4,0)
但是,如果我已经这样做了,我可能会以这种方式更清楚地重写代码

runl <- rle(x1)
i <- which( runl$length > 8 & runl$value > 3 )[1]
sum( runl$length[1:(i-1)] ) + 8
runl 3[1]
总和(runl$长度[1:(i-1)])+8

您只需转换数据,以便对响应进行编码,以区分感兴趣的度量(大于3),然后您的代码将工作,因为它将x替换为x1

x1 <- ifelse( x > 3, 4, 0 )
x13,4,0)
但是,如果我已经这样做了,我可能会以这种方式更清楚地重写代码

runl <- rle(x1)
i <- which( runl$length > 8 & runl$value > 3 )[1]
sum( runl$length[1:(i-1)] ) + 8
runl 3[1]
总和(runl$长度[1:(i-1)])+8

为什么不创建一个新向量,其中包含
rle
正常工作所需的相同值?您可以为此使用
ifelse()
,并将所有内容放入函数中:

FUN <- function(x, value, runlength) {
  x2 <- ifelse(x > value, 1, 0)

  ret <- sum(rle(x2)$lengths[ 1:(min(which(rle(x2)$lengths >= runlength))-1) ]) + runlength
  return(ret)
}

> FUN(x, value = 3, runlength = 8)
[1] 10
FUN(x,值=3,运行长度=8)
[1] 10

为什么不创建一个新向量,其中包含
rle
正常工作所需的相同值?您可以为此使用
ifelse()
,并将所有内容放入函数中:

FUN <- function(x, value, runlength) {
  x2 <- ifelse(x > value, 1, 0)

  ret <- sum(rle(x2)$lengths[ 1:(min(which(rle(x2)$lengths >= runlength))-1) ]) + runlength
  return(ret)
}

> FUN(x, value = 3, runlength = 8)
[1] 10
FUN(x,值=3,运行长度=8)
[1] 10

这里有一种矢量化的方法,只需使用
cumsum
cummax
即可。让我们举一个例子,它有一个短(长度小于8)的大于3的元素序列和一个长的元素序列,只是为了确保它做了正确的事情

> x <- c(2,2,4,5,6,7,2,2,4,9,8,7,6,5,4,5,6,9,2,2,9)
> x3 <- x > 3
> cumsum(x3) - cummax(cumsum(x3)*(!x3))
 [1]  0  0  1  2  3  4  0  0  1  2  3  4  5  6  7  8  9 10  0  0  1
> which( cumsum(x3) - cummax(cumsum(x3)*(!x3)) == 8)[1]
[1] 16
>xx3 3
>累积量(x3)-累积最大值(累积量(x3)*(!x3))
[1]  0  0  1  2  3  4  0  0  1  2  3  4  5  6  7  8  9 10  0  0  1
>其中(cumsum(x3)-cummax(cumsum(x3)*(!x3))==8[1]
[1] 16

这里有一种矢量化的方法,只需使用
cumsum
cummax
即可。让我们举一个例子,它有一个短(长度小于8)的大于3的元素序列和一个长的元素序列,只是为了确保它做了正确的事情

> x <- c(2,2,4,5,6,7,2,2,4,9,8,7,6,5,4,5,6,9,2,2,9)
> x3 <- x > 3
> cumsum(x3) - cummax(cumsum(x3)*(!x3))
 [1]  0  0  1  2  3  4  0  0  1  2  3  4  5  6  7  8  9 10  0  0  1
> which( cumsum(x3) - cummax(cumsum(x3)*(!x3)) == 8)[1]
[1] 16
>xx3 3
>累积量(x3)-累积最大值(累积量(x3)*(!x3))
[1]  0  0  1  2  3  4  0  0  1  2  3  4  5  6  7  8  9 10  0  0  1
>其中(cumsum(x3)-cummax(cumsum(x3)*(!x3))==8[1]
[1] 16