我有一个包含100多列的大矩阵,但并非所有列都有值只有5或6个连续列在每行中都有值,其余列都是NA。我想创建一个只有5列的矩阵,它取5个连续列的值。例如:
A = [NA NA 1 2 3 4 5 6 NA NA; 1 2 3 4 5 NA NA NA NA NA; NA NA NA NA 1 2 3 4 5 6; NA NA NA 1 2 3 4 5 NA NA]
我想要这个矩阵:
A = [1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5; 1 2 3 4 5]
谢谢
答案 0 :(得分:0)
#DATA
A = structure(c(NA, 1L, NA, NA, NA, 2L, NA, NA, 1L, 3L, NA, NA, 2L,
4L, NA, 1L, 3L, 5L, 1L, 2L, 4L, NA, 2L, 3L, 5L, NA, 3L, 4L, 6L,
NA, 4L, 5L, NA, NA, 5L, NA, NA, NA, 6L, NA), .Dim = c(4L, 10L
))
#INPUT
A
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,] NA NA 1 2 3 4 5 6 NA NA
#[2,] 1 2 3 4 5 NA NA NA NA NA
#[3,] NA NA NA NA 1 2 3 4 5 6
#[4,] NA NA NA 1 2 3 4 5 NA NA
直截了当的方法是遍历每一行(使用lapply
或apply
)并从每行中提取前5个非NA元素。
A_out = do.call(rbind, lapply(1:NROW(A), function(i) A[i,][!is.na(A[i,])][1:5]))
OR
A_out = t(apply(X = A, MARGIN = 1, function(x) x[!is.na(x)][1:5]))
#OUTPUT
A_out
# [,1] [,2] [,3] [,4] [,5]
#[1,] 1 2 3 4 5
#[2,] 1 2 3 4 5
#[3,] 1 2 3 4 5
#[4,] 1 2 3 4 5