2016-09-22 87 views
2

連續值基本上我有這樣一個數據:減去R中

Begin.Time..s. 1.039*** 3.133* 5.156 7.168 9.249 11.362    

End.Time..s. 1.383** 3.437 5.5 7.539 9.546 11.674 

我想作以下操作:

3.133* - (1.383** - 1.039***) 

然後繼續,直到數據結束。

+0

那你試試這麼遠嗎? – Vincent

+0

@ P9710053對於所有計算而言,都是3.133 *常量 –

回答

1

使用從dplyrlag功能,我們可以做到以下幾點,

df$Begin[-1] - na.omit(dplyr::lag(df$End - df$Begin)) 
#[1] 2.789 4.852 6.824 8.878 11.065 

DATA

dput(df) 
structure(list(Begin = c(1.039, 3.133, 5.156, 7.168, 9.249, 11.362 
), End = c(1.383, 3.437, 5.5, 7.539, 9.546, 11.674)), .Names = c("Begin", 
"End"), row.names = c(NA, -6L), class = "data.frame") 

基於@尼古拉的建議EDIT ,較輕的辦法是

df1$Begin[-1]-(df1$End-df1$Begin)[-nrow(df1)] 
#[1] 2.789 4.852 6.824 8.878 11.065 
+2

調用'dplyr'並調用'na.omit'對於這個簡單的任務來說似乎有點多餘。 'df $ Begin [-1] - (df $ End-df $ Begin)[--nrow(df)]'就足夠了。 – nicola

+2

是的。我打算使用基本函數來創建滯後的變量,但是'dplyr'的'滯後'變得非常可讀。 – Sotos

1

希望它可能是從基礎R

df1$Begin[2:length(df1$Begin)]-(df1$End[1:5]-df1$Begin[1:5]) 
[1] 2.789 4.852 6.824 8.878 11.065 

數據

從以前的OP索托斯複製是非常有用

+1

哇感謝兄弟它的作品就像一個魅力... – Learner