Aşağıdaki gibi bir veri çerçevem var (206 satır 49 cols). Her bir satırın benzersiz bir adı (ID) vardır, her bir ID 3 kolonda 3 tekrar okumalıdır (örn. D15C D15C.1 D15C.2). Colnames'in ilk 4 harfi ("D15C") grup adlarıdır. Sütunların grup isimleriyle (örneğin D15C, D15C.1 ve D15.2'yi almak için D15C) ortalamasını almam gerekir, böylece son tablo 49 sütundan 16 sütuna birleştirilecektir.R satır, gruplara (veya benzersiz kimliklere) göre birden çok sütun üzerinde demektir
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 değiştirmiş olduğu ve agrega kullanmak için aşağıdaki veriler çerçevesine düzenlendi:
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
Ancak aşağıdaki agrega ("agg" veri çerçevesi adı) tamamlamak için, 370 saniye sürdü . Sorun
agg <- aggregate(x = agg[, 2:ncol(agg)], by = list(ID = agg$ID), FUN = "mean", na.rm = T)
Bu yüzden bir data.table onu dönüştürülür ve bir veri tablosu yöntemini çalıştırmak ...... Ben bekleyen tablolar bu tür 100'ün olması. neyin yanlış olduğunu emin değil
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)
:
dt <- as.data.table(agg)
setkey(dt, ID)
dt2 <- dt[,lapply(list(dt[2:ncol(dt)]),mean),by = ID]
ama
birkaç dakika sonra bir hata mesajı aldım. Dt [1: 5,1: 5] dt'nin "head" bölümünü görmek için kullanamazsınız ve head (dt), "head" ı göremediğim çatıdan geçen çok fazla satır döndürür. Şimdi ne yapacağımı bilmiyorum.ID'leri bir sütunda (data.frame'deki gibi) listeleyebilir veya tabloyu transpoze edebilir ve kimlikleri ilk satırda listeleyebilir (data.table'da olduğu gibi). Her iki durumda da, verileri toplamak için daha hızlı bir yol var mı? Çok müteşekkirim!
İlk soru eh? Hoşgeldiniz. 'Data.table' paketindeki gibi gerçekten data.table demek istiyor musunuz? Eğer 'transpose' ve 'aggregate' denediyseniz, o zaman size yardımcı olabilecek tam komutları sağlamak en iyisidir. 'Data.table yöntemi' ile ne kastettiğiniz hakkında bir fikriniz yok. Yığın Taşması konusunda iyi sorular sormak için bazı kurallar var (ama onları hızlıca yapamam). Tavsiye istemek için R sohbet odasını deneyin. –
Üzgünüm, net değildi. Daha fazla ayrıntı sağlamak için onu düzenledim. Umarım şimdi daha anlaşılabilir. – user1444754
Çok daha iyi, teşekkürler. Bu cevap vermeyi çok hızlı yaptı. –