在R中分组相似的值

时间:2012-03-29 08:00:30

标签: r grouping cluster-analysis heatmap

我有制表符分隔文本文件有两列但行长不同(即2022,1765,834等)。下面给出了该文件的摘录

  ProbeID      A.Signal ProbeID   B.Sigal   ProbeID C.Signal  ProbeID   D.Signal
    13567      163.452    41235   145.678   34562   145.225   12456   143.215
    3452       175.345    42563   231.678   52136   167.322   67842   456.178 
    1358       189.321    31256   193.564   15678   189.356   35134   167.324
    46345      234.567    25672   456.124   14578   456.234   18764   234.125
    65623      156.234                      96432   125.678   7821    145.678
    86512      178.321                      45677   896.234                  
                                            45677   143.896    

现在我想从所有具有simliar Signal值的文件中找到那些ProbeID并从中创建热图。请帮帮我。如果需要,我也可以提供任何额外的数据。

2 个答案:

答案 0 :(得分:1)

您可以做的是创建一个包含三列的文件:

Probe.ID | Signal | Type
13567 | 163.452 | A
41235 |  145.678 | B
...

然后您至少拥有一种格式的分隔文件。有了这个,您可以选择在数据表达式分析中使用的众多集群方法之一。在R中你可以找到内置的聚类功能(例如clust,kmeans)。

我的建议是在R中找到一些聚类算法并尝试使用您的数据。为每个聚类算法绘制热图并对其进行比较。但最重要的是要了解每种聚类算法的工作原理。

答案 1 :(得分:0)

您提供的数据子集不包含任何重复出现的ProbeID。但是,如果真实数据存在,那么这个答案可能会引起人们的兴趣。

如果你想通过ProbeID合并文本文件中的数据,基于评论中引用的Q& A(感谢@GGrothendieck):

df1<-data.frame(ProbeID=c(13567,3452,1358,46345,65623,86512),
  A.Signal=c(163.452,175.345,189.321,234.567,156.234,178.321))

df2<-data.frame(ProbeID=c(41235,42563,31256,25672),
  B.Signal=c(145.678,231.678,193.564,456.124))

df3<-data.frame(ProbeID=c(34562,52136,15678,14578,96432,45677,45677),
  C.Signal=c(145.225,167.322,189.356,456.234,125.678,896.234,143.896))

df4<-data.frame(ProbeID=c(12456,67842,35134,18764,7821),
  D.Signal=c(143.215,456.178,167.324,234.125,145.678))

run.seq <- function(x) as.numeric(ave(paste(x), x, FUN = seq_along))

L <- list(df1, df2, df3, df4)
L2 <- lapply(L, function(x) cbind(x, run.seq = run.seq(x$ProbeID)))

out <- Reduce(function(...) merge(..., all = TRUE), L2)[-2]

对象out将是data.frame,您可以分析,例如,通过查找每个探针的信号平均值。

out$theRowMean<-rowMeans(out[,grep("Signal",names(out))],na.rm=TRUE)

theProbeMeans<-tapply(out$theRowMean,out$ProbeID,mean)
相关问题