Ho un data.frame
di 130.209 righe.come faccio a dividere un dataframe per fila in blocchi di n, applicare una funzione e combinare?
> head(dt)
mLow1 mHigh1 mLow2 mHigh2 meanLow meanHigh fc mean
A_00001 37.00 12.75 99.25 78.50 68.125 45.625 1.4931507 56.8750
A_00002 31.00 21.50 84.75 53.00 57.875 37.250 1.5536913 47.5625
A_00003 72.50 26.50 81.75 74.75 77.125 50.625 1.5234568 63.8750
voglio dividere il data.frame
in 12, applicare la funzione scale
sulla colonna fc
e poi combinarlo. Non c'è alcuna variabile di raggruppamento qui, altrimenti avrei usato ddply
. Inoltre, poiché 130.209 non è perfettamente divisibile per 12, lo data.frames
risultante sarà sbilanciato, vale a dire 11 data.frame
s avrà 10.851 file e l'ultimo avrà 10.848 righe, ma va bene.
Quindi, come faccio a dividere uno data.frame
per riga in blocchi di n (in questo caso 12), applicare una funzione e combinarli insieme? Qualsiasi aiuto sarebbe molto apprezzato.
Aggiornamento: Utilizzando le due soluzioni migliori, ottengo risultati diversi: Utilizzando la soluzione di @ Ben Bolker,
mLow1 mHigh1 mLow2 mHigh2 UID gene_id meanLow meanHigh mean fc
1.5 3.25 1 1.25 MGLibB_00021 0610010K14Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00034 0610037L13Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibB_00058 1100001G20Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00061 1110001A16Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00104 1110034G24Rik 1.25 2.25 1.75 -0.5231249
1.5 3.25 1 1.25 MGLibA_00110 1110038F14Rik 1.25 2.25 1.75 -0.5231249
Utilizzando @ risposta di MichaelChirico:
mLow1 mHigh1 mLow2 mHigh2 UID gene_id meanLow meanHigh mean fc fc_scaled
1.5 3.25 1 1.25 MGLibB_00021 0610010K14Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00034 0610037L13Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibB_00058 1100001G20Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00061 1110001A16Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00104 1110034G24Rik 1.25 2.25 1.75 0.5555556 -0.5089608
1.5 3.25 1 1.25 MGLibA_00110 1110038F14Rik 1.25 2.25 1.75 0.5555556 -0.5089608
questo numero di riga non è grande. Perché ti piacerebbe operare in scala separatamente e combinare i risultati invece di scalare direttamente la colonna fc ?? –
Voglio controllare il fc (fold change) per l'abbondanza media (media). I dati sono ordinati per media nel mio attuale dataframe. Voglio calcolare separatamente zscore per blocchi separati di abbondanze medie (veramente basso, basso ... med ... alto ... molto alto) –
Perché non usare 'cut (1: nrow (dt), 12)' con Diviso? –