我有一个 $N imes T$ 矩阵,其中 $N$ 是观察次数,$T$ 是我的特定算法的迭代次数。
对于每次迭代,我使用的函数都会将 $N$ 观测值聚类为多个聚类。请注意,簇的数量可能会因迭代而变化,并且簇不一定按存在顺序填充。
例如,对于 $N = 10$ 个观测值,对于迭代 $t = 1$,该函数可能会将矩阵的第一列填充为:
11, 4, 10, 21, 23, 3, 17, 9, 4, 17
,即,观测值 1 分配给聚类 11,观测值 2 为分配给集群 4,依此类推。
我想更改此向量/列,使簇按存在顺序填充,即我希望上述分类向量变为:
1, 2, 3, 4, 5, 6, 7, 8, 2, 7
。
R 中是否有一个函数可以为我执行此操作,或者任何人都可以建议几行代码来实现单个分类向量的所需输出,并且我可以将其扩展到我的整个矩阵?
如果你有一个向量
x <- c(11, 4, 10, 21, 23, 3, 17, 9, 4, 17)
如果你只想为每个级别分配唯一的ID,你可以使用
match(x, unique(x))
# [1] 1 2 3 4 5 6 7 8 2 7
或
as.integer(factor(x, levels=unique(x)))
# [1] 1 2 3 4 5 6 7 8 2 7
your_matrix <- matrix(c(11, 4, 10, 21, 23, 3, 17, 9, 4, 17,
12, 5, 11, 22, 24, 4, 18, 10, 5, 18), ncol = 2)
reordered_matrix <- apply(your_matrix, 2, function(x) as.numeric(factor(x, levels = unique(x))))
print(reordered_matrix)