删除NA值时,Matrix转为类(字符)

时间:2012-06-30 21:54:28

标签: r matrix

下面的可重复示例。我有一个模拟循环,我偶尔会有一些行需要从矩阵中删除。我通过在我需要在特定位置删除的行中输入“NA”值来完成此操作,然后我有一行代码来删除任何带有NA的行。到目前为止,这一点很有效。我的问题是,我现在正在以某种方式运行模拟,偶尔会将我的矩阵变为单行。然后发生这种情况,矩阵被转换为'字符',并使模拟崩溃。

示例:

mat<-matrix(1:10,5,2) #setting up a simplified example matrix
mat[3:5,1]<-NA #Giving 3 rows 'NA' values, for removal of these rows
mat<-mat[!is.na(mat[,1]),] #An example where my procedure works just fine
class(mat)    
mat[2,1]<-NA #Setting 1 of the remaining 2 rows as NA
mat<-mat[!is.na(mat[,1]),] #Removing one of final two rows
class(mat) #No longer a matrix

我有什么方法可以做到这一点,我最终不会丢失格式作为矩阵?我假设这个问题来自于我使用“is.na”命令,但我没有找到一个好方法来使用它。

为了更深入地了解这个问题,如果有更好的方法可以做到这一点,我太天真了,还没找到......在我的真实模拟中,我在矩阵中有一个列当给定行中的个体存活时保持“1”,并且当死亡时保持“0”。当一个人(单行)死亡(并且值从'1'变为'0')时,我需要删除该行。我知道如何做到这一点的唯一方法是将'0'更改为'NA',然后删除所有NA的行。如果有一种方法可以在特定列中删除带有“0”的行来避免此问题,那就太棒了!

1 个答案:

答案 0 :(得分:3)

默认情况下,[函数会将输出强制转换为可能的最低维度。在您的示例中,您有一个二维数组(矩阵):当提取单个行时,它被强制转换为字符向量。

为避免这种情况,请查看drop函数的[选项。你应该这样做:

mat <- mat[!is.na(mat[,1]),, drop = FALSE]