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,我喜欢以矩阵格式保存数据集