如何从数据中消除单个 NA 值

how to eliminate single NA values from data

我有一个大矩阵,我想从中删除 NA 并将下一个值移到它的位置。我不想删除整行或整列。我需要清理此矩阵,以便轻松将其导入 excel.

我的矩阵:

> head(m)

 NA    21005.00    801515021     50  132   6.83
901.56 21049.00    801515025     NA  200   249

所需的矩阵:

> head(m)

21005.00  801515021  50  132   6.83   901.56   
21049.00  801515025  NA  200   249    921.03

您的示例暗示在删除 Na 值后,您的矩阵具有一种 "natural" 结构(即整数低于整数,同一列中大小相似的值)。你可以简单地这样做:

new_matrix <- matrix( m[!is.na(m)], nrow = ..., ncol = ..., byrow = TRUE)

这将采用矩阵的非 Na 值,并从中创建一个新矩阵,其维度可以在 nrow 和 ncol 中指定。

好吧,如果我做对了你的任务,你想要消除所有 NA 值并将下一个值按行移动到它的位置,即从右到左。

这是实现此目的的代码。为了保持矩阵尺寸与原来相同,新矩阵的末尾用0填充。

# create initial matrix
m <- matrix(data = c(NA, 21005.00, 801515021, 50, 132, 6.83, 901.56, 21049.00, 801515025, NA, 200, 249), 2,6, byrow = TRUE)

c <- 1
n <- list()
# run through initial matrix and if value is not NA, add to new list
for (i in 1:dim(m)[1]) {
    for (j in 1:dim(m)[2]) {
        if (!is.na(m[i,j])) {
            n[[c]] <- m[i,j]
            c <- c + 1
        }
    }
}

# append 0s to the end to keep initial matrix dimensions
for (i in 1:(length(m) - length(n)) ) {
    n[[c+1]] <- 0
    c <- c + 1
}

# convert result to matrix
new <- matrix(unlist(n), ncol = dim(m)[2], byrow = TRUE)

您的初始数据:

NA        21005.00    801515021     50  132   6.83
901.56    21049.00    801515025     NA  200   249

代码结果:

21005.00    801515021     50    132   6.83   901.56
21049.00    801515025     200   249   0.00     0.00