我有一个矩阵,其中包含多个包含信号的列。有些列非常相似(但不相等),因为它们共享最高值,并且只有最低值(噪声)不同。我想为每个人保留一列,但我不知道该怎么做。 例如,从以下矩阵开始:
1 150 0 2 150
25 100 25 25 100
170 30 170 170 30
230 6 230 230 5
我想留下
1 150
25 100
170 30
230 6
有什么好主意吗?
这是我到目前为止所尝试的: 如果我的矩阵是“x”,我创建矩阵“a”:
a <- apply(x, 2, function(p){tail(sort(p),3)})
然后我删除了相等的列:
b <- unique(a, MARGIN = 2)
但后来我不知道如何继续
答案 0 :(得分:1)
这只是一个想法,尚未完全充实。您可以使用群集来实现此目的:
mat <- read.table(text="1 150 0 2 150
25 100 25 25 100
170 30 170 170 30
230 6 230 230 5")
mat <- as.matrix(mat)
d <- dist(t(mat), method = "euclidean") # distance matrix
fit <- hclust(d, method = "ward.D2")
plot(fit)
如果硬性要求只允许最小值不同,则需要检查群集。也许其他距离或聚类算法可以更好地工作......