Ich habe einen Datenrahmen wie unten (20.000 Zeilen von 49 Spalten). Jede Zeile hat einen eindeutigen Namen (ID), jede ID hat 3 Wiederholungslesevorgänge in 3 Spalten (z. B. D15C D15C.1 D15C.2). Die ersten 4 Buchstaben der Spaltennamen ("D15C") sind Gruppennamen. Ich muss die Spalten nach den Gruppennamen mitteln (z. B. Durchschnitt D15C, D15C.1 und D15.2, um D15C zu erhalten), sodass die Finaltabelle auf 16 Spalten aus 49 Spalten konsolidiert wird.R Zeile bedeutet für mehrere Spalten nach Gruppen (oder eindeutige IDs)
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)
I umgesetzt und bearbeitet es auf den folgenden Datenrahmen, um Aggregat zu verwenden:
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
Aber das folgende Aggregat („agg“ ist der Datenrahmen Name) nahm 370 Sekunden abgeschlossen . Das Problem ist, dass ich 100 von dieser Art von Tabellen warten ......
agg <- aggregate(x = agg[, 2:ncol(agg)], by = list(ID = agg$ID), FUN = "mean", na.rm = T)
Also habe ich es zu einem data.table umgewandelt und eine Datentabelle Methode ausgeführt.
dt <- as.data.table(agg)
setkey(dt, ID)
dt2 <- dt[,lapply(list(dt[2:ncol(dt)]),mean),by = ID]
aber bekam eine Fehlermeldung nach einigen Minuten:
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)
nicht sicher, was falsch ist. Kann nicht dt [1: 5,1: 5] verwenden, um den "Kopf" -Teil von dt zu sehen, und Kopf (dt) gibt zu viele Linien zurück, die durch das Dach liefen. Ich kann auch den "Kopf" nicht sehen. Ich weiß nicht, was ich jetzt tun soll.
Ich kann die IDs in einer Spalte auflisten (wie in data.frame) oder die Tabelle transponieren und die IDs in der ersten Zeile auflisten (wie in data.table). Wie auch immer, gibt es einen schnelleren Weg, die Daten zu aggregieren? Sehr geschätzt! Diese
Erste Frage eh? Herzlich willkommen. Meinst du wirklich data.table wie im Paket 'data.table'? Wenn Sie "transpose" und "aggregate" versucht haben, ist es am besten, die genauen Befehle anzugeben, die Sie ausprobiert haben, damit die Leute helfen können. Keine Ahnung, was du unter 'Data.table-Methode' meinst. Es gibt wahrscheinlich einige Richtlinien, um gute Fragen zu Stack Overflow irgendwo zu stellen (aber ich kann sie nicht schnell). Probieren Sie den R-Chatroom aus, um Rat zu holen. –
Sorry, es war nicht klar. Ich habe es bearbeitet, um mehr Details zur Verfügung zu stellen. Ich hoffe, es ist jetzt verständlicher. – user1444754
Viel besser, danke. Dies hat es sehr schnell beantwortet. –