我有一个这样的整数向量:
a <- c(2,3,4,1,2,1,3,5,6,3,2)
values<-c(1,2,3,4,5,6)
我想列出,对于我的向量中的每个唯一值(唯一值被排序),它们出现的位置。我想要的输出:
rep_indx<-data.frame(c(4,6),c(1,5,11),c(2,7,10),c(3),c(8),c(9))
split
非常适合这里,它返回a
中每个唯一值的索引列表:
indList <- split(seq_along(a), a)
indList
# $`1`
# [1] 4 6
#
# $`2`
# [1] 1 5 11
#
# $`3`
# [1] 2 7 10
#
# $`4`
# [1] 3
#
# $`5`
# [1] 8
#
# $`6`
# [1] 9
您可以通过传递值作为字符来访问索引,例如:
indList[["1"]]
# [1] 4 6
你可以这样做,使用sapply
。您需要的排序由sort
函数保证。
sapply(sort(unique(a)), function(x) which(a %in% x))
#### [[1]]
#### [1] 4 6
####
#### [[2]]
#### [1] 1 5 11
#### ...
它将产生一个列表,给出你重复的索引。它不能是data.frame,因为data.frame需要有相同长度的列。
sort(unique(a))
就是你的vector
变量。
注意:您也可以使用lapply
强制输出为列表。使用sapply
,您将获得一个列表,除非碰巧复制的数量始终相同,那么输出将是一个矩阵…所以,你的选择!
也许这也有用
order(match(a, values))
#[1] 4 6 1 5 11 2 7 10 3 8 9
您可以使用lapply
函数返回一个带有索引的列表。
lapply(values, function (x) which(a == x))