Группировка похожих значений в R - PullRequest
0 голосов
/ 29 марта 2012

У меня есть текстовые файлы с разделителями табуляции с двумя столбцами, но разной длины строки (т. Е. 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    

Теперь я хочу найти эти ProbeID из всех файлов, которые имеют одинаковые значения сигналов, и создать из них тепловую карту. Пожалуйста, помогите мне. Я также могу предоставить любые дополнительные данные, если требуется.

Ответы [ 2 ]

1 голос
/ 29 марта 2012

Что вы можете сделать, это создать файл с тремя столбцами:

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

Тогда у вас есть хотя бы отдельные файлы в одном формате. При этом вы можете выбрать одну из многих кластерных методологий, которые использовались при анализе выражений данных. В R вы можете найти встроенную функцию кластеризации (например, clust, kmeans).

Мой совет - найти несколько алгоритмов кластеризации в R и опробовать их на ваших данных. Постройте для каждого алгоритма кластеризации тепловую карту и сравните их. Но самое главное понять, как работает каждый алгоритм кластеризации.

0 голосов
/ 29 марта 2012

Подмножество предоставленных вами данных не включает в себя повторяющиеся идентификаторы ProbeID. Однако, если реальные данные таковы, этот ответ может представлять интерес.

Если вы хотите объединить данные в текстовые файлы по ProbeID, основываясь на вопросах и ответах, на которые я ссылался в комментарии (спасибо @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)
...