2017-03-07 26 views
1

我想获得每个非零系列的最大值。 例如:如何在R代码中找到向量中的最大系列

x <- c(0, 0, 0, 10, 50, 30, 0, 0, 0, 0, 30, 6, 5, 44, 0, 0, 1, 2) 

我想在R代码中获得50,44,2。

+0

你能澄清这个问题一点?你的意思是说零运行作为子序列的分隔符,并且你想要每个子序列的最大值? –

回答

3

您可以使用rle

zero <- rle(x == 0) 
y <- sapply(split(x, rep(seq_along(zero$lengths), zero$lengths)), max) 
y[y > 0] 
## 2 4 6 
## 50 44 2 

或者,类似地, “data.table”:

library(data.table) 
data.table(x)[, max(x), rleid(x == 0)][V1 > 0] 
## rleid V1 
## 1:  2 50 
## 2:  4 44 
## 3:  6 2 
+0

谢谢!你太棒了! – NOA11120