我有以下形式的矩阵
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
1 1 3 2 3 1 1 2 3 3 2
以下是我想要的输出(结合列号,具有相同的值)。
a<-1,2,6,7
b<-3,5,9,10
c<-4,8,11
我有以下形式的矩阵
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
1 1 3 2 3 1 1 2 3 3 2
以下是我想要的输出(结合列号,具有相同的值)。
a<-1,2,6,7
b<-3,5,9,10
c<-4,8,11
以下为您提供了一个足够的列表:
aList <- setNames(split(seq_along(mat), mat), unique(letters[mat]))
aList
# $a
# [1] 1 2 6 7
#
# $c
# [1] 4 8 11
#
# $b
# [1] 3 5 9 10
但是,如果您确实需要环境中的变量,则可以执行以下操作:
attach(aList)
m1 <- matrix(c(1, 1, 3, 2, 3, 1, 1, 2, 3, 3, 2), nrow = 1)
split(seq_len(ncol(m1)), m1[1, ])
为您提供所需元素的列表。我假设您并不想创建向量a
,b
并且c
split(seq_len(ncol(m1)), m1[1, ])
$`1`
[1] 1 2 6 7
$`2`
[1] 4 8 11
$`3`
[1] 3 5 9 10
您可以使用by
按重复元素分组并返回它们的行名。
tab <- read.table(text ='[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11]
1 1 3 2 3 1 1 2 3 3 2',head=T)
x <- t(tab)
by(x,x,FUN=rownames)
INDICES: 1
[1] "X..1." "X..2." "X..6." "X..7."
----------------------------------------------------------------------------------------------------------
INDICES: 2
[1] "X..4." "X..8." "X..11."
----------------------------------------------------------------------------------------------------------
INDICES: 3
[1] "X..3." "X..5." "X..9." "X..10."
编辑更漂亮的输出
rownames(x) <- 1:nrow(x)
> by(x,x,FUN=rownames)
INDICES: 1
[1] "1" "2" "6" "7"
----------------------------------------------------------------------------------------------------------
INDICES: 2
[1] "4" "8" "11"
----------------------------------------------------------------------------------------------------------
INDICES: 3
[1] "3" "5" "9" "10"
你的问题有点奇怪,我怀疑你遗漏了一些细节。要得到你想要的东西有点笨拙。首先生成一些数据:
##Some data
R> m = matrix(sample(1:3, 10, replace=T), ncol=10)
R> m
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 2 2 3 1 3 3 2 2 1
然后选择唯一值:
R> v = unique(m[1,])
现在根据需要创建向量:
R> (a = which(v[1]==m[1,]))
[1] 1 5 10
R> (b = which(v[2]==m[1,]))
[1] 2 3 8 9
R> (c = which(v[3]==m[1,]))
[1] 4 6 7
然而,这是不可扩展的(或优雅的)。如果您有多个值,您将需要遍历v
,例如:
(l = sapply(v, function(i) which(m[1, ] == i)))
变量l
是一个列表。要访问各个元素,请使用
l[[1]]
l[[2]]
l[[3]]