Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
处理NA'前后的值;R中矩阵中的s_R_Matrix_Subset - Fatal编程技术网

处理NA'前后的值;R中矩阵中的s

处理NA'前后的值;R中矩阵中的s,r,matrix,subset,R,Matrix,Subset,我有一个矩阵。以下是条件: (1) 每列中包含四个或更多连续零的值之和 (2) 获取每列的最大值,并将这些最大值存储在向量中 例如: v1 <- c(2,4,6,1,0) v2 <- c(1,0,1,9,0) v3 <- c(0,0,3,0,1) v4 <- c(0,0,2,0,10) v5 <- c(0,0,13,0,7) v6 <- c(0,20,9,0,2) mat1 <- rbind(v1, v2, v3, v4, v5, v6) ## Repl

我有一个矩阵。以下是条件:

(1) 每列中包含四个或更多连续零的值之和

(2) 获取每列的最大值,并将这些最大值存储在向量中

例如:

v1 <- c(2,4,6,1,0)
v2 <- c(1,0,1,9,0)
v3 <- c(0,0,3,0,1)
v4 <- c(0,0,2,0,10)
v5 <- c(0,0,13,0,7)
v6 <- c(0,20,9,0,2)
mat1 <- rbind(v1, v2, v3, v4, v5, v6)
## Replace four or more zeros by NA
fill_NA <- function(X, zero_val=0, new_val= NA){   
  apply(X,2,function(x){
       r <- rle(x)
       r$values[ r$lengths > 3 & r$values == zero_val ] <- new_val
       inverse.rle(r)
      })
}
fill_NA(mat1)
 mat2 <-  fill_NA(mat1)
> mat2
 [,1] [,2] [,3] [,4] [,5]
[1,]    2    4    6    1    0
[2,]    1   NA    1    9    0
[3,]   NA   NA    3   NA    1
[4,]   NA   NA    2   NA   10
[5,]   NA   NA   13   NA    7
[6,]   NA   20    9   NA    2

v1由于它是一个
矩阵
,我们可以循环通过
apply
指定
MARGIN
为2的列,然后基于
NA
的出现,使用
tapply
获得按所创建组分组的
,并获得
max

apply(mat2, 2, function(x)  {
          rl <- rle(is.na(x))
          rl$values <- seq_along(rl$values)
          max(tapply(x, inverse.rle(rl), FUN = sum, na.rm = TRUE))
  })
#[1]  3 20 34 10 20
应用(mat2,2,函数(x){

rl看起来似乎遗漏了第二列(顶部元素)中的
4
。@AntoniosK我猜OP想要得到所有sumOk组的
max
,我认为
4
20
被视为单独的组(在该列中)由于它们之间的NAs。@AntoniosK我的理解是,组合在一起的元素被视为一个组(措辞有点棘手),这就是为什么,因为它们说“第二列=最大值4,20=20”。所以,我错过了:)