我想在R中的nxm矩阵中创建一个包含五列的矩阵

时间:2017-08-09 14:37:16

标签: r matrix

我有一个包含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]

谢谢

1 个答案:

答案 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

直截了当的方法是遍历每一行(使用lapplyapply)并从每行中提取前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