2013-03-07 20 views
1

,我有以下數據:多行中的R

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

我要作出這樣的返回四個不同的場景的真實值的函數:

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

你不包括先前的角度。你正在從當前角度減1。你的函數需要你實現它的兩個參數,第一個是角度,第二個是前一個索引(或者只是索引)的角度。 – Arun 2013-03-07 16:35:26

+0

謝謝Arun,那正是我不知道該怎麼做的,儘管下面的解決方案絕對更優雅。如果我在哪裏使用我寫的方法,我將如何'參數化'在上一個索引的角度?在你下面的方法中,c()函數中0的用法是什麼? (試圖從這裏學到最多:) – Joeri 2013-03-07 17:38:33

+0

0的目的是將它添加到'data.1 $ angle'的第一個元素。由於您將它添加到前一個角度,所以第一個角度不會有前一個角度。所以,我加0。 – Arun 2013-03-07 17:40:20

回答

6

你可以做矢量化格式,而不是每個角度一個一個做。

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

ABS(data.1 $角)> 0.3 - 所述第一和第二條件。
abs(data.1 $ angle + c(0,head(data.1 $ angle,-1)))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 
+1

+1。我只是在用'diff'嘗試一些東西,但它並沒有像預期的那樣工作。 – A5C1D2H2I1M1N2O1R2T1 2013-03-07 16:36:52

+0

+1(x,-1) – 2013-03-07 17:18:31