我有以下数据:
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文档的迷宫之后,我没有别的办法,只能在这里问一下。谢谢你的帮助!
答案 0 :(得分:6)
您可以采用矢量化格式,而不是逐个为每个角度执行此操作。
abs(data.1$angle) > 0.3 | abs(data.1$angle + c(0, head(data.1$angle,-1))) > 0.3
abs(data.1 $ angle)&gt; 0.3 - 第一和第二条件
abs(data.1 $ angle + c(0,head(data.1 $ angle,-1)))&gt; 0.3 - 获取所有角度并使用c(0, head(., -1))
将前一个角度添加到其中。然后再次使用abs
检查0.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