R:找到矩阵的类似列

时间:2015-06-17 09:42:48

标签: r

我有一个矩阵,其中包含多个包含信号的列。有些列非常相似(但不相等),因为它们共享最高值,并且只有最低值(噪声)不同。我想为每个人保留一列,但我不知道该怎么做。 例如,从以下矩阵开始:

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)

但后来我不知道如何继续

1 个答案:

答案 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)

resulting plot

如果硬性要求只允许最小值不同,则需要检查群集。也许其他距离或聚类算法可以更好地工作......