我有一个数据矩阵
dataA <- matrix(c(0.74, 1.00,0.56, 0.74, 1.00,0.56, 0.74, 1.00, 0.56,0.39, 0.79, 0.35, 0.39, 0.79, 0.35), ncol=3, nrow=3)
看起来像:
[,1] [,2] [,3]
[1,] 0.74 1.00 0.56
[2,] 0.74 1.00 0.56
[3,] 0.74 1.00 0.56
[4,] 0.39 0.79 0.35
[5,] 0.39 0.79 0.35
我需要得到的是两个数据框,如下所示:
组别1
[,1] [,2] [,3]
1 0.74 1.00 0.56
2 0.74 1.00 0.56
3 0.74 1.00 0.56
组2
[,1] [,2] [,3]
4 0.39 0.79 0.35
5 0.39 0.79 0.35
非常感谢任何帮助
答案 0 :(得分:0)
这是一种方法。使用apply
和paste
将行元素的向量作为每行一个字符串。将此值提取到split
以及矩阵的行数,以便按重复项分解矩阵行。然后将split
输出的分组行列表提供给lapply
,以执行数据A的子集化。
myMatList <- lapply(split(seq_len(nrow(dataA)),
apply(dataA, 1, paste, collapse=" ")),
function(x) dataA[x,])
返回
myMatList
$`0.39 0.79 0.35`
[,1] [,2] [,3]
[1,] 0.39 0.79 0.35
[2,] 0.39 0.79 0.35
$`0.74 1 0.56`
[,1] [,2] [,3]
[1,] 0.74 1 0.56
[2,] 0.74 1 0.56
[3,] 0.74 1 0.56
要添加名称,您可以粘贴&#34; Group&#34;到像这样的列表项的索引。
names(myMatList) <- paste0("Group", seq_along(myMatList))
如果在名称中维护矩阵的顺序很重要,可以使用match
# use index from match() as argument to paste0
names(myMatList) <- paste0("Group", match(names(myMatList),
unique(apply(dataA, 1, paste, collapse=" "))))
其中unique(apply(dataA, 1, paste, collapse=" ")))
包含原始顺序中矩阵的唯一行表。
数据强>
dataA <- matrix(c(rep(c(0.74, 1.00,0.56), 3), rep(c(0.39, 0.79, 0.35), 2)), 5, byrow=TRUE)