在 R 中,请考虑这个示例列表:
x <- c(0,0,6,25,1,3,2,8,45,27,3,45,64,170,2,47,155,153,65,131,119,57,150,50,122,105,136,112,20,162,35,12,149,18,0)
y <- c(173,30,168,3,10,34,20,172,17,165,73,53,40,141)
z <- c(2,6,3,173,15,5,13,29,14,7,33,173,8,44,112,11,165)
testList <- list(x,y,z)
我有一个向量列表,我想做的是找到连续整数的最大数量,这些整数 > 120 并且 < 120。这将输出两个单独的列表,一个用于 GOOD (<120),一个用于坏(> 120)。
因此 GOOD 的期望输出(连续最大值 < 120)如下所示:
[[1]]
[1] 13
[[2]]
[1] 4
[[3]]
[1] 7
像这样的 BAD(最多连续 > 120):
[[1]]
[1] 2
[[2]]
[1] 1
[[3]]
[1] 1
我目前试图解决这个问题的方式似乎非常低效。我正在设置所有 < 120 == 1 且所有 > 120 == 0 的内容。然后我试图找出连续找到多少个零以及使用 rle 找到多少个零,最后取其中的最大值。我在想也许这一切都可以通过 rle、lapply 和 which 以某种方式完成。也许是这样的(但它目前不起作用):
rleTest <- lapply(testList,rle) ##Use this to find out
BAD <- rleTest$lengths[rleTest$values>120]#how many of same number are in a row
GOOD <- rleTest$lengths[rleTest$values<120]
BADList <- list(max(BAD))
GOODList <- list(max(GOOD))