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的组。 我希望你没有混淆。谢谢
答案 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])))