Mam ramkę danych, jak poniżej (20 000 wierszy po 49 kolach). Każdy wiersz ma unikalną nazwę (ID), każdy identyfikator ma 3 powtórzenia w 3 kolumnach (np. D15C D15C.1 D15C.2). Pierwsze 4 litery nazw zmiennych ("D15C") to nazwy grup. Potrzebuję uśrednić kolumny według nazw grup (np. Średnia D15C, D15C.1 i D15.2, aby uzyskać D15C), więc ostateczna tabela zostanie skonsolidowana do 16 kolumn z 49 kolumn.Wiersz R oznacza wiele kolumn według grup (lub unikalnych identyfikatorów)
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 transponowane i edytować go do kolejnej ramki danych w celu wykorzystania agregatu:
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
Ale następujący zbiorczą („agg” to nazwa ramki danych) zajęło 370 sekund, aby zakończyć . Problem polega na tym, że mam 100 z tego rodzaju stoły czekają ......
agg <- aggregate(x = agg[, 2:ncol(agg)], by = list(ID = agg$ID), FUN = "mean", na.rm = T)
Więc przeliczone go do data.table i uruchomić metodę tabeli danych.
dt <- as.data.table(agg)
setkey(dt, ID)
dt2 <- dt[,lapply(list(dt[2:ncol(dt)]),mean),by = ID]
ale dostałem komunikat o błędzie po kilku minutach:
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)
Nie wiem co jest nie tak. Nie można użyć dt [1: 5,1: 5], aby zobaczyć "głowę" części dt, a głowa (dt) zwraca zbyt wiele linii, które przebiegły przez dach, nie widzę też "głowy". Nie wiem, co teraz zrobić.
Mogę wymienić identyfikatory w jednej kolumnie (jak w data.frame) lub przetransponować tabelę i wyświetlić listę identyfikatorów w pierwszym wierszu (jak w tabeli danych). Tak czy inaczej, czy istnieje jakiś szybszy sposób agregowania danych? Bardzo doceniane!
Pierwsze pytanie, co? Witamy. Czy naprawdę masz na myśli data.table jak w pakiecie 'data.table'? Jeśli próbowałeś 'transpose' i' aggregate', wtedy najlepiej podać dokładne polecenia, które wypróbowałeś, aby ludzie mogli pomóc. Nie mam pojęcia, co masz na myśli przez "Metoda Data.table". Prawdopodobnie istnieją pewne wskazówki dotyczące zadawania dobrych pytań w Stack Overflow (ale nie mogę ich szybko). Wypróbuj pokój rozmów sieciowych R, aby uzyskać poradę. –
Niestety nie było jasne. Zmontowałem go, aby podać więcej szczegółów. Mam nadzieję, że teraz jest to bardziej zrozumiałe. – user1444754
Znacznie lepiej, dziękuję. To bardzo szybko odpowiedziało. –