在R中的移位数据范围内找到最大值

时间:2014-04-01 11:35:07

标签: r

我是初学者,不知道究竟要搜索哪些字词,所以如果我能轻易找到有关我问题的帮助,请原谅我。

我有一个像这样的数据框:

data <- structure(list(index = 1:25, val = c(1, 5, 2, 34, 65, 2, 5, 6, 
8, 4, 2, 2, 8, 89, 5, 43, 45, 7, 3, 67, 8, 9, 93, 5, 7)), .Names = c("index", 
"value"), row.names = c(NA, -25L), class = "data.frame")

 index value
1      1     1
2      2     5
3      3     2
4      4    34
5      5    65

我想找到最大值(并将其命名为x1),简单:

x1 <- max(data$value)

然后我想找到“低于”x1的值范围的最大值(即索引低于x1)并将其命名为x2:

x2 <- max(data$value[which(data$index<data$index[which(data$value==x1)])])

现在我想继续这样,直到找到所有“最大”值(在这种情况下为65,34,5和1)。我试图查看for循环(或lapply?)但我不知道从哪里开始。你能给我一些指示吗?

1 个答案:

答案 0 :(得分:1)

您可以使用cummax

## find cummax
cm <- cummax(data$value)
#  [1]  1  5  5 34 65 65 65 65 65 65 65 65 65 89 89 89 89 89 89 89 89 89 93 93 93

## find first index of the maximal values
idx <- which(!duplicated(cm))

## bind them together
m <- cbind(idx=idx, max=cm[idx])
m
#     idx max
#[1,]   1   1
#[2,]   2   5
#[3,]   4  34
#[4,]   5  65
#[5,]  14  89
#[6,]  23  93