查找向量的组件,其持续增加k倍

时间:2015-09-20 08:15:21

标签: r

我想创建一个函数,它可以找到一个向量连续增加k次的组件。

也就是说,如果设想的功能是f(x,k)x=c(2,3,4,3,5,6,5,7),那么 f(x,1)的值为2,3,3,5,5,因为只有x的这些组件增加了一倍。

此外,如果k=2,则f(x,2)的值为2,3,因为只有这些组件连续增加2倍。(2→3→4和3→5→6 )

我想我应该使用像for这样的重复语法来实现这个目的。

2 个答案:

答案 0 :(得分:2)

1)使用动物园套餐中的rollapply

library(zoo)
f <- function(x, k)
       x[rollapply(x, k+1, function(x) all(diff(x) > 0), align = "left", fill = FALSE)]

现在测试f

x <- c(2,3,4,3,5,6,5,7)

f(x, 1)
## [1] 2 3 3 5 5

f(x, 2)
## [1] 2 3

f(x, 3)
## numeric(0)

1a)此变体略短,也有效:

f2 <- function(x, k) head(x, -k)[ rollapply(diff(x) > 0, k, all) ]

2)以下是不使用软件包的1a版本:

f3 <- function(x, k) head(x, -k)[ apply(embed(diff(x) > 0, k), 1, all) ]

答案 1 :(得分:0)

我不太明白你问题的第二部分(k = 2)但是第一部分你可以使用这样的东西:

test<-c(2,3,4,3,5,6,5,7) #Your vector

diff(test) #Differentiates the vector
diff(test)>0 #Turns the vector in a logical vector with criterion >0

test[diff(test)>0] #Returns only the elements of test that correspond to a TRUE value in the previous line