1

我有以下数据:

measurement <- c(1:30)
angle <- rnorm(30, 0, 0.4)
data.1 <- data.frame(measurement, angle)

我想创建一个函数,为四种不同的场景返回一个 TRUE 值:

   1. When 'angle' >  0.3 
or 2. When 'angle' < -0.3 
or 3. When 'angle' + the previous 'angle' >  0.3 
or 4. When 'angle' + the previous 'angle' < -0.3 

我用for循环尝试了它,我已经尝试过以下方式,但我只是不知道如何包含角度和之前一个时间步测量的角度的总和(所以我是在这里做是错误的,但我该如何改进它?最好以计算最不费力的方式,因为我使用大量数据集):

n<-data.1$angle
function1 <- function(n){
    return(n>0.3 | n<(-0.3) | (n+(n-1))>(0.3) | (n+(n-1))<(-0.3))
}

很抱歉成为 R 新手,但在浏览了 R 文档的迷宫后,我没有别的办法,只能在这里提问。感谢您的帮助!

4

1 回答 1

6

您可以以矢量化格式执行此操作,而不是为每个角度一个接一个地执行此操作。

abs(data.1$angle) > 0.3 | abs(data.1$angle + c(0, head(data.1$angle,-1))) > 0.3

abs(data.1$angle) > 0.3 - 第一个和第二个条件。
abs(data.1$angle + c(0, head(data.1$angle,-1))) > 0.3 - 获取所有角度并使用c(0, head(., -1)). 然后再次检查abs0.3 和 -0.3

我得到:

# [1] FALSE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE
# [15]  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE FALSE FALSE  TRUE  TRUE
# [29]  TRUE  TRUE
于 2013-03-07T16:32:19.250 回答