Ho una cornice dati come di seguito (20.000 righe per 49 colonne). Ogni riga ha un nome univoco (ID), ciascun ID ha 3 letture ripetute in 3 colonne (ad esempio D15C D15C.1 D15C.2). Le prime 4 lettere dei nomi ("D15C") sono nomi di gruppo. Ho bisogno di mediare le colonne in base ai nomi dei gruppi (ad esempio D15C medio, D15C.1 e D15.2 per ottenere D15C), quindi la tabella finale verrà consolidata su 16 colonne da 49 colonne.Riga R significa su più colonne per gruppi (o ID univoci)
ID D04C D04C.1 D08H D08H.1 D08H.2 D15C D15C.1 D15C.2 D15L D15L.1 D15L.2
1 1367452_at 11.11 10.93 11.85 10.94 10.87 10.73 10.62 10.85 10.73 10.77 10.52
2 1367453_at 9.65 9.94 9.78 9.68 9.67 9.86 9.71 9.82 9.74 9.71 9.76
3 1367454_at 10.19 10.36 9.68 10.07 10.08 10.35 10.26 10.32 10.27 10.19 10.47
(… 20000 rows)
ho trasposto e modificati al seguente frame di dati al fine di utilizzare aggregati:
ID 1367452_at 1367453_at 1367454_at ... ...
1 D04C 11.11 9.65 10.19
2 D04C 10.93 9.94 10.36
3 D08H 11.85 9.78 9.68
4 D08H 10.94 9.68 10.07
5 D08H 10.87 9.67 10.08
6 D15C 10.73 9.86 10.35
7 D15C 10.62 9.71 10.26
8 D15C 10.85 9.82 10.32
9 D15L 10.73 9.74 10.27
10 D15L 10.77 9.71 10.19
11 D15L 10.52 9.76 10.47
Ma, le seguenti aggregati ("agg" è il nome del frame di dati) ha preso 370 secondi per completare . Il problema è che ho 100 di questo tipo di tavoli in attesa ......
agg <- aggregate(x = agg[, 2:ncol(agg)], by = list(ID = agg$ID), FUN = "mean", na.rm = T)
Così ho convertito a una data.table ed eseguire un metodo tabella di dati.
dt <- as.data.table(agg)
setkey(dt, ID)
dt2 <- dt[,lapply(list(dt[2:ncol(dt)]),mean),by = ID]
ma ho ottenuto un messaggio di errore dopo pochi minuti:
Error: cannot allocate vector of size 144 Kb
In addition: Warning messages:
1: Reached total allocation of 1535Mb: see help(memory.size)
2: Reached total allocation of 1535Mb: see help(memory.size)
Non sei sicuro di ciò che è sbagliato. Non posso usare dt [1: 5,1: 5] per vedere la parte "testa" di dt, e head (dt) restituisce troppe righe che attraversano il tetto. Non riesco a vedere neanche la "testa". Non so cosa fare ora.
Posso elencare gli ID in una colonna (come in data.frame) o trasporre la tabella e elencare gli ID nella prima riga (come in data.table). In ogni caso, esiste un modo più rapido per aggregare i dati? Davvero apprezzato!
Prima domanda eh? Benvenuto. Intendi veramente data.table come nel pacchetto 'data.table'? Se hai provato 'transpose' e' aggregate', allora è meglio fornire i comandi esatti che hai provato in modo che le persone possano aiutarti. Non hai idea di cosa intendi per "metodo Data.table". Ci sono probabilmente alcune linee guida per fare buone domande su Stack Overflow da qualche parte (ma non posso farlo velocemente). Prova la chat room R per chiedere un consiglio. –
Mi dispiace, non è stato chiaro. L'ho modificato per fornire maggiori dettagli. Spero sia più comprensibile ora. – user1444754
Molto meglio, grazie. Ciò ha reso molto rapida la risposta. –