我是初学者,不知道究竟要搜索哪些字词,所以如果我能轻易找到有关我问题的帮助,请原谅我。
我有一个像这样的数据框:
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
?)但我不知道从哪里开始。你能给我一些指示吗?
答案 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