Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按名称删除矩阵中的列和行[R]_R_Matrix - Fatal编程技术网

按名称删除矩阵中的列和行[R]

按名称删除矩阵中的列和行[R],r,matrix,R,Matrix,我有一个亲属关系矩阵,它本质上是一个ID列表,下面是相同的ID,如下所示: ID1 ID2 ID3 ID4 ID5 ID6 ID2 ID3 ID4 ID5 ID6 等等。我想从矩阵中删除某些ID(即,删除我不想要的ID的列和行)。我的矩阵是129 x 129,我想保留的ID列表是60个ID。我尝试了以下代码(使用虚拟数据): 您需要将dimnames添加到矩阵中,并确保将列条件放在逗号的右侧(字面意思) nm <- paste0("ID", 1:6) kinstmp <-

我有一个亲属关系矩阵,它本质上是一个ID列表,下面是相同的ID,如下所示:

ID1  ID2  ID3  ID4  ID5  ID6
ID2
ID3
ID4
ID5
ID6
等等。我想从矩阵中删除某些ID(即,删除我不想要的ID的列和行)。我的矩阵是129 x 129,我想保留的ID列表是60个ID。我尝试了以下代码(使用虚拟数据):


您需要将
dimnames
添加到矩阵中,并确保将列条件放在逗号的右侧(字面意思)

nm <- paste0("ID", 1:6)
kinstmp <- matrix(c(0,0,1,0,1,0,
                    0,0,1,0,0,0,
                    0,1,1,1,0,0,
                    1,0,1,0,0,0,
                    0,0,1,0,1,0,
                    0,0,1,0,0,0), nrow = 6, dimnames = list(nm, nm))
kinstmp

id <- c("ID3", "ID5", "ID6")

# subsetting rows
kinstmp2 <- kinstmp[!rownames(kinstmp) %in% id, ]
kinstmp2
#     ID1 ID2 ID3 ID4 ID5 ID6
# ID1   0   0   0   1   0   0
# ID2   0   0   1   0   0   0
# ID4   0   0   1   0   0   0

# subsetting columns
kins <- kinstmp2[ , !colnames(kinstmp2) %in% id]
kins
#     ID1 ID2 ID4
# ID1   0   0   1
# ID2   0   0   0
# ID4   0   0   0

# or subsetting rows and columns in one call
kinstmp[!rownames(kinstmp) %in% id, !colnames(kinstmp2) %in% id]

nm和更改
kinstmp2[colnames(kinstmp2)%in%id,]
by
kinstmp2[,colnames(kinstmp2)%in%id]
已更正-但实际上仍然没有任何区别-似乎删除了所有id(不仅仅是我不想要的id)。我也很好奇如何保存我想要的身份证。仅将代码更改为(例如,
kinstmp[rownames(kinstmp)%in%id,]
似乎不起作用……因此您应该。。。我的id列表一开始就错了。:)
ID3
ID5
ID6
nm <- paste0("ID", 1:6)
kinstmp <- matrix(c(0,0,1,0,1,0,
                    0,0,1,0,0,0,
                    0,1,1,1,0,0,
                    1,0,1,0,0,0,
                    0,0,1,0,1,0,
                    0,0,1,0,0,0), nrow = 6, dimnames = list(nm, nm))
kinstmp

id <- c("ID3", "ID5", "ID6")

# subsetting rows
kinstmp2 <- kinstmp[!rownames(kinstmp) %in% id, ]
kinstmp2
#     ID1 ID2 ID3 ID4 ID5 ID6
# ID1   0   0   0   1   0   0
# ID2   0   0   1   0   0   0
# ID4   0   0   1   0   0   0

# subsetting columns
kins <- kinstmp2[ , !colnames(kinstmp2) %in% id]
kins
#     ID1 ID2 ID4
# ID1   0   0   1
# ID2   0   0   0
# ID4   0   0   0

# or subsetting rows and columns in one call
kinstmp[!rownames(kinstmp) %in% id, !colnames(kinstmp2) %in% id]