繁体   English   中英

R:遍历矩阵,根据条件删除单元格

[英]R: Loop through matrix, delete cells based on criteria

我正在尝试遍历矩阵,如果上一列中的单元格为NA,则将单元格值更改为NA。

它是一个具有9个列和57772行的大矩阵。 尝试了不同的for循环,但我似乎无法正确处理。

简而言之,这个矩阵。

m <- structure(c("X","X","X","X","X","X", NA, "X", "X", NA, NA, "X", "X", NA, NA, "X", "X", 
             NA, NA, NA, "X", NA, NA, NA, "X"), .Dim = c(5L, 5L), .Dimnames = list(
               NULL, c("1", "2", "3", "4","5")))

应该变成这个

      1   2   3   4   5  
[1,] "X" "X" NA  NA  NA
[2,] "X" NA  NA  NA  NA 
[3,] "X" "X" "X" NA  NA 
[4,] "X" "X" NA  NA  NA 
[5,] "X" NA  NA  NA  NA 

但是有了这个循环

for(j in ncol(m):2) m[, j] <- ifelse(is.na(m[, j-1]), NA, m[, j])

只会变成这个

      1   2   3   4   5  
[1,] "X" "X" NA  NA  "X"
[2,] "X" NA  NA  "X" NA 
[3,] "X" "X" "X" NA  NA 
[4,] "X" "X" NA  NA  NA 
[5,] "X" NA  NA  NA  NA

这里有一个简单的循环就足够了。

for(j in 2:ncol(m) m[, j] <- ifelse(is.na(m[, j-1]), NA, m[, j])

赠送:

     1   2   3   4  5 
[1,] "X" "X" NA  NA NA
[2,] "X" NA  NA  NA NA
[3,] "X" "X" "X" NA NA
[4,] "X" "X" NA  NA NA
[5,] "X" NA  NA  NA NA

注意

可复制形式的输入为:

m <- structure(c(NA, NA, "X", NA, NA, NA, NA, "X", NA, NA, NA, NA, 
    NA, NA, NA, NA, NA, NA, NA, "X"), .Dim = c(5L, 4L), .Dimnames = list(
    NULL, c("1", "2", "3", "4")))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM