2017-10-26 3 views
0

data.frame私は2列の値を持ち、2列目の値が繰り返されます。例えば:1つの列に似たような値に基づいてdata.frameを再構成する

 HUGO      Cell 
1 CD28     T cells 
2 CD3D     T cells 
3 CD3G     T cells 
4 CD8A    lymphocytes 
5 EOMES    lymphocytes 
6 FGFBP2    lymphocytes 
7 GNLY    lymphocytes 
8 NCR1     NK cells 
9 PTGDR    NK cells 
10 SH2D1B    NK cells 

私は列のセルに固有の名前に対応する列HUGOのすべての値は、それぞれ固有の名前の後に名前リストに取得します。例えば

T cells: CD28  CC3D  C34 
lymphocytes: CD8A EOMES FGFBP2 FGFBP2 GNLY 
... 

ため

Iは
reshape(data.frame, timevar = "HUGO",idvar = "Cell",direction = "wide") を試みたが、それは単にセル列内の各名前の値の数を返します。

+1

'分割。 – Psidom

答えて

3

あなたが何を望むかによって、いくつかの可能性があります。最初の5人はパッケージを使用していません。

1)集約/ cこれは、2番目の列がHUGO名の文字ベクトルであるデータフレームを与えます。

aggregate(HUGO ~ Cell, DF, c) 

与える:

  Cell      HUGO 
1 lymphocytes CD8A, EOMES, FGFBP2, GNLY 
2 NK cells  NCR1, PTGDR, SH2D1B 
3  T cells   CD28, CD3D, CD3G 

2)集計/のtoStringをこれは、その第二のカラムカンマでHUGO名を分離する文字列を含むデータフレームを提供します。

aggregate(HUGO ~ Cell, DF, toString) 

与える:

  Cell      HUGO 
1 lymphocytes CD8A, EOMES, FGFBP2, GNLY 
2 NK cells  NCR1, PTGDR, SH2D1B 
3  T cells   CD28, CD3D, CD3G 

3)これはその成分そのセルの各HUGO名であるリスト、セル当たり一つの成分を与えるアンスタック。

unstack(DF) 

与える:

$lymphocytes 
[1] "CD8A" "EOMES" "FGFBP2" "GNLY" 

$`NK cells` 
[1] "NCR1" "PTGDR" "SH2D1B" 

$`T cells` 
[1] "CD28" "CD3D" "CD3G" 

4)はtapplyこれは、その列である列HUGO名の序数である細胞とマトリックスを与えます。

DF2 <- transform(DF, seq = ave(seq_along(HUGO), Cell, FUN t= seq_along)) 
tapply(DF2$HUGO, DF2[-1], c) 

与える:

reshape(DF2, timevar = "seq", idvar = "Cell", dir = "wide") 

を与える:

  Cell HUGO.1 HUGO.2 HUGO.3 HUGO.4 
1  T cells CD28 CD3D CD3G <NA> 
4 lymphocytes CD8A EOMES FGFBP2 GNLY 
8 NK cells NCR1 PTGDR SH2D1B <NA> 

   seq 
Cell   1  2  3  4  
    lymphocytes "CD8A" "EOMES" "FGFBP2" "GNLY" 
    NK cells "NCR1" "PTGDR" "SH2D1B" NA  
    T cells  "CD28" "CD3D" "CD3G" NA 

5)これは、データフレームを与えるために一緒にreshapeと最後の選択肢からDF2を使用を整形が与える

  Cell 1  2  3 4 
1 lymphocytes CD8A EOMES FGFBP2 GNLY 
2 NK cells NCR1 PTGDR SH2D1B <NA> 
3  T cells CD28 CD3D CD3G <NA> 

7)をread.zoo:

6)これは、与え"data.frame"のサブクラス)

library(dplyr) 
library(tidyr) 

DF %>% 
    group_by(Cell) %>% 
    mutate(seq = 1:n()) %>% 
    ungroup() %>% 
    spread(seq, HUGO) 

ある出力として"tbl_df"クラスオブジェクトを(与えを広めますその時代がセルである動物園のオブジェクト。
時刻は実際には文字列なので、解釈を避けるためにFUN=identityを使用しています。 fortify.zooはそれをデータフレームに変換します。 DF2は上からのものです。

library(zoo) 

fortify.zoo(read.zoo(DF2, split = "seq", index = "Cell", FUN = identity)) 

与える:これは出力としてdata.table与え

 Index 1  2  3 4 
1 lymphocytes CD8A EOMES FGFBP2 GNLY 
2 NK cells NCR1 PTGDR SH2D1B <NA> 
3  T cells CD28 CD3D CD3G <NA> 

8) dcast。

library(data.table) 

DT <- data.table(DF) 
DT[, seq:=1:.N, by = Cell] 
dcast(DT, Cell ~ seq, value.var = "HUGO") 

与える:

  Cell 1  2  3 4 
1: NK cells NCR1 PTGDR SH2D1B NA 
2:  T cells CD28 CD3D CD3G NA 
3: lymphocytes CD8A EOMES FGFBP2 GNLY 

注: `($ HUGO、DFの$セルDF)

DF <- structure(list(HUGO = c("CD28", "CD3D", "CD3G", "CD8A", "EOMES", 
"FGFBP2", "GNLY", "NCR1", "PTGDR", "SH2D1B"), Cell = c("T cells", 
"T cells", "T cells", "lymphocytes", "lymphocytes", "lymphocytes", 
"lymphocytes", "NK cells", "NK cells", "NK cells")), .Names = c("HUGO", 
"Cell"), class = "data.frame", row.names = c(NA, -10L)) 
関連する問題