仅子集包含矩阵列表中的完整个案的行

时间:2013-12-16 12:09:32

标签: arrays r list matrix na

我有一个矩阵列表,所有矩阵都是相同的。列表中的每个矩阵代表不同的样本;每个矩阵包含三列X,Y和Z坐标,每行代表3D空间中的不同点(即可识别的地标)。

大多数标本缺少特定地标的坐标数据(因此所有三列都包含NA)。我想对列表中的所有矩阵进行子集化,使得它们仅包括包含完整数据的地标/行(即,对于整个列表中的任何样本/矩阵,该行中不存在NA)。

我担心这对于以列表格式存储的数据来说可能是一项相当复杂的任务。由于所有矩阵都具有相同的尺寸,将数据转换为数组会更容易吗?我想避免这样做,因为它(我相信)会删除我用来识别数据的行,列和列表元素名称。

2 个答案:

答案 0 :(得分:2)

例如,使用complete.cases

res <- lapply(your_list,function(mat)
                   mat[complete.cases(mat),]

如果您的矩阵具有相同数量的列,您可以使用以下内容将结果放在一个大矩阵中:

do.call(rbind,res)

答案 1 :(得分:0)

最好的办法是先使用

do.call(rbind,res)

然后使用包含所有列表子矩阵的单个矩阵再添加一列和另外一列来标记每个子矩阵的行。因此,如果您的子矩阵各有3行,则此列将如下所示:1,2,3,1,2,3,...,1,2,3  e.g

    singleMatrix=do.call(rbind,res)

的rowIndex =代表(C(1:numberOfRowsOfSubMatrix,numberOfSubMatrices) 然后与indicatorsingMatrixrowindex

形成组合数据框
Matrix=data.frame(singleMatrix,indicator,rowindex)

现在,如果indicator==0删除该行并删除所有名为rowindex的行。