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

时间:2018-01-29 07:40:49

标签: r matrix na

我有一个大矩阵,我想从中删除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

2 个答案:

答案 0 :(得分:1)

您的示例意味着在删除Na值后,您的矩阵具有一种“自然”结构(即整数低于整数,同一列中的类似大小的值)。你可以这样做:

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

这将获取矩阵的非Na值,并从中生成一个新矩阵,您可以在nrow和ncol中指定维度。

答案 1 :(得分:1)

好吧,如果我的任务正确,你想要消除所有的NA值并将下一个值移到它的位置BY ROW,即从右边的左边。

这是实现此目的的代码。为了使矩阵尺寸与原始尺寸相同,新矩阵的末端用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