2012-04-03 6 views
2

私はこのような構造のリストを持っていますmy.list[[file.id]][value.id]]<-a value(1 or 0)。同じvalue.idが異なるfile.idに存在する可能性があります。R:リストをマトリックスに再編成

すべてのvalue.idsとしてrownamesを持つ行列が必要です。colnamesはfile.idsであり、各セルはmy.list[[file.id]][[value.id]]です。

クレイジーのように反復せずにすばやく行う方法はありますか?

サンプルデータ:

リスト:

$`Zhou_et_al_2004` 
    CDC42:P60953 CDK2D:NONAME MAPK12:P53778 E2F3:NONAME GRB2:P62424 GRB2:P62993  RFA:NONAME 
      "up"   "up"   "down"   "down"   "down"   "down"   "down" 
    CDK9:P50750 JUP/DP3:NONAME MEK1:NONAME RFC38:NONAME  DP2:NONAME RFC37:NONAME GADD45:NONAME 
     "down"   "down"   "down"   "down"   "down"   "down"   "down" 

$`Zhou_et_al_2006` 
    CTTN:Q14247 GTSE1:Q9NYZ3  CHST11:Q9N  CHST11:PF2 TNRC6A:Q8NDV7 MMP9:P14780  NRIP3:Q9N 
      "up"   "up"   "up"   "up"   "up"   "up"   "up" 
    NRIP3:Q35 EGFR:P00533 GFPT2:NONAME TPCN2:Q8NHX9  BBP:NONAME SQLE:Q14534 DISP2:NONAME 
      "up"   "up"   "up"   "up"   "up"   "up"   "up" 
    PAPPA:Q13219 BMP2:P12643 PCM1:Q15154 SUCLG2:Q96I99 ASAH1:Q13510 UQCRC2:P22695 MTUS1:NONAME 
      "up"   "up"   "down"   "down"   "down"   "down"   "down" 
    MUC20:NONAME FRAT2:NONAME PLA2G4A:P47712 
     "down"   "down"   "down" 

$`Zhou_et_al_2007` 
    CTTN:Q14247 GTSE1:Q9NYZ3  CHST11:Q9N  CHST11:PF2 TNRC6A:Q8NDV7  NRIP3:Q9N 
      "up"   "up"   "up"   "up"   "up"   "up" 
     NRIP3:Q35 USP32:Q8NFA0 PPFIBP1:Q86W92 MALAT1:NONAME TRA2A:NONAME MGC17624:NONAME 
      "up"   "up"   "up"   "up"   "up"   "up" 
    SLC6A2:P23975 USP42:Q9H9J4 RASEF:NONAME SEMA3C:Q99985  NDE1:Q9NXR1  TRA1:NONAME 
      "up"   "up"   "up"   "up"   "up"   "up" 
    PPFIA1:Q13136 PPFIA1:Q16787 ITGA9:Q13797 ITGA9:Q14469  LMO2:P25791 NR2F2:P24468 
      "up"   "up"   "down"   "down"   "down"   "down" 
KIAA0882:NONAME  PCM1:Q15154  CYB5:NONAME  IDH1:NONAME MYLIP:Q8WY64 ASAH1:Q13510 
     "down"   "down"   "down"   "down"   "down"   "down" 
    HADHSC:NONAME FAM84B:Q96KN1  ADH5:P11766  NTN4:Q9HB63  AK3:Q9UIJ7 MTUS1:NONAME 
     "down"   "down"   "down"   "down"   "down"   "down" 
KIAA1815:NONAME 
     "down" 

MATRIX:

   Zhou2004 Zhou2006 Zhou2007 
CDC42:P60953 "up"  NA  NA  
CDK2D:NONAME "up"  NA  NA  
MAPK12:P53778 "down" NA  NA  
E2F3:NONAME  "down" NA  NA  
GRB2:P62424  "down" NA  NA  
GRB2:P62993  "down" NA  NA  
RFA:NONAME  "down" NA  NA  
CDK9:P50750  "down" NA  NA  
JUP/DP3:NONAME "down" NA  NA  
MEK1:NONAME  "down" NA  NA  
RFC38:NONAME "down" NA  NA  
DP2:NONAME  "down" NA  NA  
RFC37:NONAME "down" NA  NA  
GADD45:NONAME "down" NA  NA  
CTTN:Q14247  NA  "up"  "up"  
GTSE1:Q9NYZ3 NA  "up"  "up"  
CHST11:Q9N  NA  "up"  "up"  
CHST11:PF2  NA  "up"  "up"  

plyrパッケージから

+0

入力と予想出力としてサンプルデータを追加してください。 – Chase

+1

貼り付けが簡単になるようにサンプルデータを 'dput 'できますか? – James

答えて

2

my.list <- list() 
my.list[["Zhou_et_al_2004"]]["CDC42:P60953"] <- 1 
my.list[["Zhou_et_al_2004"]]["CDK2D:NONAME"] <- 2 
my.list[["Zhou_et_al_2006"]]["CTTN:Q14247"] <- 3 
my.list[["Zhou_et_al_2006"]]["GTSE1:Q9NYZ3"] <- 4 
my.list[["Zhou_et_al_2006"]]["CHST11:Q9N"] <- 5 
my.list[["Zhou_et_al_2009"]]["CTTN:Q14247"] <- 6 

a <- lapply(seq_along(my.list), function(i) { 
    x <- my.list[[i]] 
    out <- data.frame(name=names(x), out=x) 
    names(out)[2] <- names(my.list)[[i]] 
    out 
}) 

は、一緒に

out <- Reduce(function(x,y) { merge(x, y, all=TRUE) }, a) 

をすべてのデータフレームをマージし、データフレームの中にリストの各要素を作りますrownamesを修正してください。

rownames(out) <- out[,1] 
out <- out[,-1] 

結果は次のとおりです。

> out 
      Zhou_et_al_2004 Zhou_et_al_2006 Zhou_et_al_2009 
CDC42:P60953    1    NA    NA 
CDK2D:NONAME    2    NA    NA 
CHST11:Q9N    NA    5    NA 
CTTN:Q14247    NA    3    6 
GTSE1:Q9NYZ3    NA    4    NA 
+0

ありがとう!それは完璧に働いた – JoshDG

4

ldplyが特に有用である(より多くの行が存在することになります)この種の仕事のために。 - その場合片はrbind.fill. *

rbind.fillはdata.frames結合この便利な機能である

と組み合わされる

.funがデータフレームを返すときに最も明白な挙動が達成される:DOCから見つからないデータをNAで埋めてください。

だからここのトリックはdata.frameにあなたのリストの要素をオン機能を適用することです:

my.list <- list() 
my.list[["Zhou_et_al_2004"]]["CDC42:P60953"] <- 1 
my.list[["Zhou_et_al_2004"]]["CDK2D:NONAME"] <- 2 
my.list[["Zhou_et_al_2006"]]["CTTN:Q14247"] <- 3 
my.list[["Zhou_et_al_2006"]]["GTSE1:Q9NYZ3"] <- 4 
my.list[["Zhou_et_al_2006"]]["CHST11:Q9N"] <- 5 

library(plyr) 
ldply(my.list, .fun = function(x)as.data.frame(as.list(x))) 
#    .id CDC42.P60953 CDK2D.NONAME CTTN.Q14247 GTSE1.Q9NYZ3 CHST11.Q9N 
# 1 Zhou_et_al_2004   1   2   NA   NA   NA 
# 2 Zhou_et_al_2006   NA   NA   3   4   5 

私はあなたの最終的なフォーマットにこれを変換する方法を知っているよ信頼しています。 @のflodelのサンプルデータを皮切り

関連する問題