Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.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,我有一个包含许多行和列的矩阵(rxp),我试图创建一个子矩阵,其中只包含那些具有相同单元格值的行和列。比如说 这是我的矩阵 a b c d a 0 1 1 1 b 1 0 0 1 c 1 0 0 1 d 0 1 0 0 e 0 1 1 1 此处,行b,c具有相同的值,因此代码应创建仅包含b和c行的第一个子矩阵和包含行a和e a b c d b 1 0 0 1 c 1 0 0 1 a b c d

我有一个包含许多行和列的矩阵(
rxp
),我试图创建一个子矩阵,其中只包含那些具有相同单元格值的行和列。比如说

这是我的矩阵

   a  b  c  d 
a  0  1  1  1  
b  1  0  0  1
c  1  0  0  1
d  0  1  0  0
e  0  1  1  1
此处,行
b
c
具有相同的值,因此代码应创建仅包含
b
c
行的第一个子矩阵和包含行
a
e

   a  b  c  d
b  1  0  0  1
c  1  0  0  1

   a  b  c  d
a  0  1  1  1 
e  0  1  1  1

您可以在两个方向上使用重复的

m[duplicated(m) | duplicated(m, fromLast=TRUE),]
#   a b c d
# b 1 0 0 1
# c 1 0 0 1
其中
m

structure(c(0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 1L, 0L), .Dim = c(4L, 4L), .Dimnames = list(c("a", "b", "c", 
"d"), c("a", "b", "c", "d")))

您可以在两个方向上使用重复的

m[duplicated(m) | duplicated(m, fromLast=TRUE),]
#   a b c d
# b 1 0 0 1
# c 1 0 0 1
其中
m

structure(c(0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 1L, 0L), .Dim = c(4L, 4L), .Dimnames = list(c("a", "b", "c", 
"d"), c("a", "b", "c", "d")))

假设可以有多组重复行,因此如果矩阵为
m
,则会创建一个矩阵列表,其中每个矩阵都有重复的行:

DF <- as.data.frame(m)
Filter(function(x) nrow(x) > 1, split(DF, do.call(paste, DF)))
df1,拆分(DF,do.call(粘贴,DF)))

可能会有多组重复行,因此如果矩阵为
m
,则会创建一个矩阵列表,其中每个矩阵都有重复的行:

DF <- as.data.frame(m)
Filter(function(x) nrow(x) > 1, split(DF, do.call(paste, DF)))
df1,拆分(DF,do.call(粘贴,DF)))
您也可以使用

 indx <- which(duplicated(m)) #m from @Richard Scriven post
你也可以使用

 indx <- which(duplicated(m)) #m from @Richard Scriven post

我认为
m[duplicated(m,fromLast=TRUE)| duplicated(m,fromLast=FALSE)]
不需要
sapply
就可以工作。没错!我用的是
&
,搞混了。干杯@很抱歉我更新了我的问题。代码应该为相同值的每个组合创建单独的子矩阵,现在m[duplicate…]正在创建一个子矩阵,所有相同的组合集中在一起。我厌倦了在m上做m[duplicated…]这不起作用这就是为什么我认为另一个答案更合适:)@RichardScriven ah:)那太完美了我认为
m[duplicated(m,fromLast=TRUE)| duplicated(m,fromLast=FALSE),]
不需要
就可以了!我用的是
&
,搞混了。干杯@很抱歉我更新了我的问题。代码应该为相同值的每个组合创建单独的子矩阵,现在m[duplicate…]正在创建一个子矩阵,所有相同的组合集中在一起。我厌倦了在m上做m【复制…】这不起作用这就是为什么我认为另一个答案更合适:)@RichardScriven啊:)那太完美了是的,那就更完美了appropriate@Grothendieck,我喜欢将我的数据集保存在矩阵格式中是的,更重要appropriate@Grothendieck,我喜欢以矩阵格式保存数据集