2017-03-09 52 views
1

是否有與diff()類似的功能,它將連續的元素分開而不是找到差異?將下一個向量的每個元素除以

x = c(10,8,4,-1) 
some_function(x) 
# [1] 1.25 2.00 -4.00 
+0

讚賞,但同樣,爲什麼建立自己的時候有一個可能提供? –

+3

這裏我不打擾一個明確的循環,例如tail(x,-1)/ head(x,-1)',或者直接用'['進行索引。 – joran

回答

2

我不認爲有這樣的事情提供基礎R.但是你可以嘗試創建自己的解決方案,如

unlist(sapply(2:length(x), function(i) x[i-1]/x[i])) 
# unlist (sort of) takes care of when x has less than 2 elements 

OR

x[-length(x)]/x[-1] 
+1

我偏好第二種方法的一部分是,當'x'的長度爲0時,你的'sapply'解決方案就會崩潰。 – joran

+0

@joran或長度爲1,當它變成'sapply(2:1,...)' – Frank

+0

@Frank,我認爲'unlist'照顧 –

0

dplyr另一種選擇正在使用lag

library(dplyr) 
lag(x)/x 

#[1] NA 1.25 2.00 -4.00 

如果要刪除NA只是做

y = lag(x)/x 
y[-1] 

#[1] 1.25 2.00 -4.00 
相關問題