Ich habe eine Frage bezüglich der Verwendung der split
Funktion zum Gruppieren von Daten von factor
.Verwenden der Split-Funktion zum Gruppieren eines Datenrahmens nach Faktor, Alternativen für große Datenrahmen
Ich habe einen Datenrahmen von zwei Spalten Snps und Gen. Snps ist ein Faktor, gene
ist ein Zeichenvektor. Ich möchte Gene nach dem SNP-Faktor gruppieren, damit ich eine Liste von Genen sehen kann, die auf jedes SNP-Gen mappt. Einige snps können mehr als einem Gen zugeordnet werden, zum Beispiel rs10000226 Karten zu Gen 345274 und Gen 5783, und Gene treten mehrmals auf.
Um dies zu tun, habe ich die Split-Funktion verwendet, um eine Liste von Genen zu erstellen, die jeder snp zugeordnet ist.
snps<-c("rs10000185", "rs1000022", "rs10000226", "rs10000226")
gene<-c("5783", "171425", "345274", "5783")
df<-data.frame(snps, gene) # snps is a factor
df$gene<-as.character(df$gene)
splitted=split(df, df$gene, drop=T) # group by gene
snpnames=unique(df$snps)
df.2<-lapply(splitted, function(x) { x["snps"] <- NULL; x }) # remove the snp column
names(df.2)=snpnames # rename the list elements by snp
df.2 = sapply(df.2, function(x) list(as.character(x$gene)))
save(df.2, file="df.2.rda")
Dies ist jedoch nicht effektiv für meinen vollen Datenrahmen (wahrscheinlich aufgrund seiner Größe - 363422 Reihen, 281.370 einzigartigen SNPs, 20888 einzigartige Gene) und R Abstürze während versuchen, später zu laden df.2.rda`.
Irgendwelche Vorschläge für alternative Möglichkeiten, dies zu tun, wäre sehr willkommen!
Warum verwenden Sie nicht "data.table" und nur Schlüssel durch die Spalte "snps". Dann können Sie einfach verschiedene Werte überprüfen. – A5C1D2H2I1M1N2O1R2T1
Ihr 'split' erstellt keine Liste von Genen, denen jeder snp zugeordnet ist." Es macht das Gegenteil: Gruppen nach Gen (das zweite Argument zu "Split"). – Frank
Was planen Sie nach der Trennung damit? Was ist der Output, den du * wirklich * brauchst? – MrFlick