Thursday, June 11, 2015

How to colapse columns using data.table in R

If you need to collapse your matrix in R and e.g. calculate mean you can use package data.table

Install:

install.packages("data.table")
library(data.table)

Read test file, rownames=NULL to load duplicate row.names:
ex.1 <- read.delim("test",sep="", row.names=NULL, stringsAsFactors=F)

Make data table, use key="row.names":

ex.2 <- data.table(ex.1,key="row.names")

> ex.2
       row.names GSM1289335 GSM1289336 GSM1289337 GSM1289338 GSM1289339
 1:   1415670_at    8.24126    8.52633    8.33998    8.86572    8.90274
 2:   1415670_at   80.24126   80.52633    8.33998    8.86572    8.90274
 3:   1415671_at   11.13090   11.24580   11.17340   10.94100   11.20140
 4:   1415671_at  110.13090  110.24580   11.17340   10.94100   11.20140
 5:   1415672_at   11.45830   11.44230   11.46260   11.18010   11.28670
 6:   1415672_at  110.45830  110.44230   11.46260   11.18010   11.28670
 7:   1415673_at    6.88159    6.98538    6.82758    6.41075    6.20351
 8:   1415673_at   60.88159   60.98538    6.82758    6.41075    6.20351
 9: 1415674_a_at    9.48842    9.45669    9.44673    9.92935    9.85057
10: 1415674_a_at   90.48842   90.45669    9.44673    9.92935    9.85057
11:   1415675_at    8.83436    8.97068    8.87163    9.22176    9.44220
12:   1415675_at   80.83436   80.97068    8.87163    9.22176    9.44220
13: 1415676_a_at   10.22460   10.42270   10.26540   11.08470   11.31620
14: 1415676_a_at  100.22460  100.42270   10.26540   11.08470   11.31620
15:   1415677_at    9.64835    9.77467    9.59813    9.44781    9.64694
16:   1415677_at   90.64835   90.77467    9.59813    9.44781    9.64694
17:   1415678_at    9.72289    9.64673    9.66538    9.66327    9.74859
18:   1415678_at   90.72289   90.64673    9.66538    9.66327    9.74859
19:   1415679_at   11.23940   11.20380   11.15410   11.38530   11.53210
20:   1415679_at  110.23940  110.20380   11.15410   11.38530   11.53210
    GSM1289340

 1:    8.70942
 2:    8.70942
 3:   11.04830
 4:   11.04830
 5:   11.21400
 6:   11.21400
 7:    6.48295
 8:    6.48295
 9:    9.86870
10:    9.86870
11:    9.33622
12:    9.33622
13:   11.04220
14:   11.04220
15:    9.38489
16:    9.38489
17:    9.52396
18:    9.52396
19:   11.38500
20:   11.38500



Collapse by row.names and make mean for each column:

> ex.2[,list(GSM1289335=mean(GSM1289335), GSM1289336=mean(GSM1289336), GSM1289337=mean(GSM1289337), GSM1289338=mean(GSM1289338), GSM1289339=mean(GSM1289339), GSM1289340=mean(GSM1289340)), by=row.names]
       row.names GSM1289335 GSM1289336 GSM1289337 GSM1289338 GSM1289339

 1:   1415670_at   44.24126   44.52633    8.33998    8.86572    8.90274
 2:   1415671_at   60.63090   60.74580   11.17340   10.94100   11.20140
 3:   1415672_at   60.95830   60.94230   11.46260   11.18010   11.28670
 4:   1415673_at   33.88159   33.98538    6.82758    6.41075    6.20351
 5: 1415674_a_at   49.98842   49.95669    9.44673    9.92935    9.85057
 6:   1415675_at   44.83436   44.97068    8.87163    9.22176    9.44220
 7: 1415676_a_at   55.22460   55.42270   10.26540   11.08470   11.31620
 8:   1415677_at   50.14835   50.27467    9.59813    9.44781    9.64694
 9:   1415678_at   50.22289   50.14673    9.66538    9.66327    9.74859
10:   1415679_at   60.73940   60.70380   11.15410   11.38530   11.53210
    GSM1289340
 1:    8.70942
 2:   11.04830
 3:   11.21400
 4:    6.48295
 5:    9.86870
 6:    9.33622
 7:   11.04220
 8:    9.38489
 9:    9.52396
10:   11.38500



No comments:

Post a Comment