R 零之间最大长度的强度

R 零之间最大长度的强度,r,R,我还有一个关于链接的问题, 在这个问题中,我想找出零之间的群的最大长度的最大强度 比如说 [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [1,] 0 15 20 17 0 0 4 5 [2,] 0 7 0 8 20 18 0 1 [3,] 0 0 5 8 0 5 7 0 从第一行的这个小矩阵中,我有两个组,在0-1-

我还有一个关于链接的问题, 在这个问题中,我想找出零之间的群的最大长度的最大强度 比如说

      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    0   15   20   17    0    0    4    5
[2,]    0    7    0    8   20   18    0    1
[3,]    0    0    5    8    0    5    7    0
从第一行的这个小矩阵中,我有两个组,在0-1-15-20-17之间,有3个数字在那一行中有最大长度。最大长度的强度为52(15+20+17)。 --与第二行相同,零之间有3组,最大长度为3,强度为46(8+20+18)。 --在第三行中,有两组在0,58和57之间,我想找出其中的两组,强度13和12。
我希望你没有弄错。谢谢。那么到目前为止你试过什么代码?不必发明所有的轮子会有帮助的。这很有效。谢谢,有没有办法把这些列表号放到一个矩阵中?我也有大数据,我做这个例子是为了解释我如何用大数据解决这个问题,你知道吗?在这个例子中,你如何创建一个矩阵,其中第1行和第3行有两个元素,第2行有三个元素?矩阵(在一般情况下以及在R中)需要是完美的矩形(在n维意义上)。如果没有元素,我们可以放零,但第二行有三个元素。或者你说的是填充所有东西,使它们都是相同的长度?第一个问题(零之间的最大长度)已经回答了。如果你的意思是“把这些列表编号放在一个矩阵中”,那么我提供的链接可以帮助你达到目的;一旦所有向量长度相同,就可以使用
do.call(rbind,list\u returned\u from\u my\u lapply\u code))
创建矩阵。
m <- as.matrix(read.table(text="0   15   20   17    0    0    4    5
0    7    0    8   20   18    0    1
0    0    5    8    0    5    7    0", header=F))

max_len_between_zeroes <- function(vec) {
  # vec : c(0, 15, 20, 17, 0, 0, 4, 5)
  vec2 <- cumsum(abs(diff(c(0,vec) != 0)))
  # vec2: c(0,  1,  1,  1, 2, 2, 3, 3)
  sums <- sapply(split(vec, vec2), sum)
  # sums:  0  1  2  3 
  #        0 52  0  9 
  sums[sums != 0]
  # returned:  1  3 
  #           52  9 
}

lapply(1:3, function(i) max_len_between_zeroes(m[i,]))
# [[1]]
#  1  3 
# 52  9 
# [[2]]
#  1  3  5 
#  7 46  1 
# [[3]]
#  1  3 
# 13 12 
na.zero <- function (x) {
  x[is.na(x)] <- 0
  return(x)
}

matrix_of_list<-na.zero(matrix(sapply(1:length(mylist),function(j) mylist[[j]][1])))