Ho una domanda sull'utilizzo della funzione split
per raggruppare i dati per factor
.Utilizzo della funzione split per raggruppare un dataframe per fattore, alternative per i dataframes grandi
Ho un frame dati di due colonne snps e gene. Snps è un fattore, gene
è un vettore di caratteri. Voglio raggruppare i geni per il fattore snp in modo da poter vedere una lista di geni che mappano ogni snp. Alcuni snp possono mappare a più di un gene, ad esempio le mappe rs10000226 al gene 345274 e il gene 5783, ei geni si verificano più volte.
Per fare ciò ho usato la funzione di divisione per creare un elenco di geni a cui ogni mappa snp.
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")
Tuttavia questo non è efficace per il mio pieno dataframe (probabilmente a causa delle sue dimensioni - 363422, 281370 file SNP unici, 20888 geni unici) e si blocca R mentre sta cercando di caricare df.2.rda` in seguito.
Qualsiasi suggerimento per modi alternativi di fare questo sarebbe molto apprezzato!
Perché non utilizzare "data.table" e solo tasto per la colonna "snps". Quindi puoi facilmente ispezionare valori diversi. – A5C1D2H2I1M1N2O1R2T1
Il tuo 'split' non" crea una lista di geni a cui ogni snp fa riferimento. " Fa il contrario: gruppi per gene (il secondo argomento per 'split'). – Frank
Cosa pensi di fare dopo la divisione? Qual è l'output che * davvero * serve? – MrFlick