0

m という次のテーブルがあります。

Identifier  DAT_SN_e15.5_1  DAT_SN_e15.5_2  DAT_SN_p2_1 DAT_SN_p2_2
100009600   3           1           0           0
100009609   13          4           1           6
100009614   0           0           0           0
100009664   9           17          5           7
100012          0           0           0           0
100017          0           0           0           0
100019          1275            70          54          353
100033459   0           0           0           0
100034251   0           0           0           0
100034361   277         4           114         830

列番号 1 は遺伝子識別子、列 2 と 3 は DAT_SN_e15.5 の生物学的複製、列 4 と 5 は DAT_SN_p2 の生物学的複製です。私の現実世界のデータは、それぞれ 2 つの複製を持つ 56 のそのようなサンプルで構成されています。名前に基づいて複製を認識し、名前の末尾にある 1 または 2 の違いのみを認識する方法はありますか?

もしそうなら、各識別子と各サンプルの 2 つの値を平均し、遺伝子識別子、DAT_SN_e15.5_ave および DAT_SN_p2_ave という名前の列を含む新しいテーブル m.rep<- を作成するにはどうすればよいでしょうか。

4

1 に答える 1

0

1 つのアイデアは、ファジー検索を使用するか、 を使用してパターンに近似一致を求めることagrepです。

## you replace nn by your colnames
nn <- c('DAT_SN_e15.5_1','DAT_SN_e15.5_2','DAT_SN_p2_1','DAT_SN_p2_2')
## for each column name find which column is approximately similar
ll <- lapply(seq_along(nn),function(x)
          nn[agrep(nn[x],nn)]) 
## remove duplicate since a is similar to n and b is similar to a
ll[!duplicated(ll)]

[[1]]
[1] "DAT_SN_e15.5_1" "DAT_SN_e15.5_2"

[[2]]
[1] "DAT_SN_p2_1" "DAT_SN_p2_2"

ここで編集して、データを使用して上記を使用する方法

dat <- read.table(text='Identifier  DAT_SN_e15.5_1  DAT_SN_e15.5_2  DAT_SN_p2_1 DAT_SN_p2_2
100009600   3           1           0           0
100009609   13          4           1           6
100009614   0           0           0           0
100009664   9           17          5           7
100012          0           0           0           0
100017          0           0           0           0
100019          1275            70          54          353
100033459   0           0           0           0
100034251   0           0           0           0
100034361   277         4           114         830',header=TRUE)

nn <- colnames(dat)[-1]

ll <- lapply(seq_along(nn),function(x)
  nn[agrep(nn[x],nn)])
ll <- ll[!duplicated(ll)]

res <- lapply(ll,function(x)rowMeans(dat[,x]))
res <- t(do.call(rbind,res))
## i take the first element of the pair as a column name
colnames(res) <- lapply(ll,'[[',1)


     DAT_SN_e15.5_1 DAT_SN_p2_1
 [1,]            2.0         0.0
 [2,]            8.5         3.5
 [3,]            0.0         0.0
 [4,]           13.0         6.0
 [5,]            0.0         0.0
 [6,]            0.0         0.0
 [7,]          672.5       203.5
 [8,]            0.0         0.0
 [9,]            0.0         0.0
[10,]          140.5       472.0
于 2013-05-21T11:51:49.690 に答える