我有制表符分隔文本文件有两列但行长不同(即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并从中创建热图。请帮帮我。如果需要,我也可以提供任何额外的数据。
答案 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)