零之间的最大长度强度

时间:2018-02-01 03:19:38

标签: r

maximum length of each numbers between zeros我还有另一个与该链接有关的问题, 在这个问题中,我想找出零之间最大长度的最大强度 例如

      [,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

从第一行的这个小矩阵中我有两个组,在零之间,一个15 20 17,其中3个数字在该行中具有最大长度。最大长度为52(15 + 20 + 17)。 - 与第二行相同,在零之间有3组,最大长度为3,强度为46(8 + 20 + 18)。 - 在第三行中有5个零和5 7之间的两个组,我想找出其中两个强度为13和12的组。 我希望你没有混淆。谢谢

1 个答案:

答案 0 :(得分:1)

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])))