Hier sind einige Möglichkeiten, je nachdem, was Sie wollen. Die ersten 5 verwenden keine Pakete.
1) aggregate/c Dies gibt einen Datenrahmen, dessen zweite Spalte ein Zeichenvektor von HUGO-Namen ist.
aggregate(HUGO ~ Cell, DF, c)
geben:
Cell HUGO
1 lymphocytes CD8A, EOMES, FGFBP2, GNLY
2 NK cells NCR1, PTGDR, SH2D1B
3 T cells CD28, CD3D, CD3G
2) Aggregat/toString Diese Spalte ein Datenrahmen, dessen zweiter ergibt enthält Zeichenfolgen, die HUGO Namen mit Komma trennt.
aggregate(HUGO ~ Cell, DF, toString)
geben:
Cell HUGO
1 lymphocytes CD8A, EOMES, FGFBP2, GNLY
2 NK cells NCR1, PTGDR, SH2D1B
3 T cells CD28, CD3D, CD3G
3) entstapeln Dies ergibt eine Liste, eine Komponente pro Zelle, deren Komponenten jeweils die HUGO Namen dieser Zelle.
unstack(DF)
geben:
$lymphocytes
[1] "CD8A" "EOMES" "FGFBP2" "GNLY"
$`NK cells`
[1] "NCR1" "PTGDR" "SH2D1B"
$`T cells`
[1] "CD28" "CD3D" "CD3G"
4) tapply Dies ergibt eine Matrix, deren Zeilen sind Zellen und deren Spalten die Ordnungszahl des Namens HUGO.
DF2 <- transform(DF, seq = ave(seq_along(HUGO), Cell, FUN t= seq_along))
tapply(DF2$HUGO, DF2[-1], c)
geben:
seq
Cell 1 2 3 4
lymphocytes "CD8A" "EOMES" "FGFBP2" "GNLY"
NK cells "NCR1" "PTGDR" "SH2D1B" NA
T cells "CD28" "CD3D" "CD3G" NA
5) umformen Dies verwendet DF2
aus der letzten Alternative zusammen mit reshape
einem Datenrahmen zu geben:
reshape(DF2, timevar = "seq", idvar = "Cell", dir = "wide")
geben:
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>
6) verteilen Dies ergibt ein "tbl_df"
Klassenobjekt als Ausgabe (die eine Unterklasse von "data.frame"
ist)
library(dplyr)
library(tidyr)
DF %>%
group_by(Cell) %>%
mutate(seq = 1:n()) %>%
ungroup() %>%
spread(seq, HUGO)
geben:
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.zooread.zoo
a ergibt Zoo-Objekt, dessen Zeiten die Zellen sind.
Da die Zeiten eigentlich Zeichenfolgen sind, verwenden wir FUN=identity
, um eine Interpretation zu vermeiden. fortify.zoo
wandelt das in einen Datenrahmen um. DF2
ist von oben.
library(zoo)
fortify.zoo(read.zoo(DF2, split = "seq", index = "Cell", FUN = identity))
geben:
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 Dies als Ausgabe ein data.table gibt.
library(data.table)
DT <- data.table(DF)
DT[, seq:=1:.N, by = Cell]
dcast(DT, Cell ~ seq, value.var = "HUGO")
geben:
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
Hinweis:
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))
'split (df $ HUGO, df $ Handy)'. – Psidom