2017-03-09 63 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 
相关问题