如何从数据中消除单个 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
我有一个大矩阵,我想从中删除 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