3

R を使用するのはこれが初めてです。

3 列 12090 行 (156 バクテリア) のテーブルがあります。最初の 2 列は細菌の名前で、最後の列は生物間の関連性を示す番号です (一種のゲノム類似性に基づく)。例は次のようになります (構成された数字):

bacteria1    bacteria2    0.25846
bacteria1    bacteria3    0.35986
bacteria2    bacteria1    0.57896
bacteria2    bacteria3    0.54596
bacteria3    bacteria1    0.23659
bacteria3    bacteria2    0.36528

これらをある種の系統樹に隣接できるようにしたいと思います。これを行うには、「nj」に距離行列が必要であることがわかります。これを距離行列または使用可能な形式に変換するにはどうすればよいですか? (数値はすでに距離であるため、計算を行う必要はありません) as.dist() と as.matrix() と reshape() を試しましたが、新しいのですべて間違っている可能性があります。(リシェイプは私が必要とするものかもしれません..)

または、他の方法でこれらをツリーにする方法を誰かが知っていれば、それは素晴らしいことです。

助けてくれてありがとう。

4

2 に答える 2

2

距離行列の上三角部分または下三角部分のいずれかがあるように聞こえますが、次元はありません。(156行あるのは確かですか?18種のバクテリアがある場合choose(18,2)、156ではなく153のエントリがあるはずです。)

テーブルに実際に153行あると仮定すると、次のようにマトリックスに入力できます。

m <- matrix(nrow=18, ncol=18)
m[row(m) < col(m)] <- x         # if it's the upper triangular portion

また

m[row(m) > col(m)] <- x         # if it's the lower triangular portion

そしてdiag(m) <- 0対角線のために。

于 2012-10-12T00:20:12.953 に答える
2

ライブラリを使用するreshape2(これはベース R の reshape 関数とは異なります。

# Load the library (after installing it, of course)
library(reshape2)

# Load up your data - for future reference, it's always helpful to post your data
# with a question.  I used dput(x) to generate this structure below:
x <- structure(list(V1 = structure(c(1L, 1L, 2L, 2L, 3L, 3L), 
     .Label = c("bacteria1", "bacteria2", "bacteria3"),
     class = "factor"), V2 = structure(c(2L, 3L, 1L, 3L, 1L, 2L),
     .Label = c("bacteria1", "bacteria2", "bacteria3"), class = "factor"),
     V3 = c(0.25846, 0.35986, 0.57896, 0.54596, 0.23659, 0.36528)),
     .Names = c("V1", "V2", "V3"), class = "data.frame",
     row.names = c(NA, -6L))

# Recast it - acast returns a matrix with V1 as the records, V2 as the columns,
# and V3 as the values
distmat <- acast(x, V1 ~ V2, value.var = "V3")
于 2012-10-11T21:30:54.880 に答える