다음과 같은 데이터 프레임이 있습니다 (20,000 행 x 49 열). 각 행에는 고유 한 이름 (ID)이 있으며 각 ID에는 3 개의 열에 3 개의 반복 읽기가 있습니다 (예 : D15C D15C.1 D15C.2). colnames ("D15C")의 처음 네 글자는 그룹 이름입니다. 그룹 이름별로 열을 평균화해야합니다 (예 : 평균 D15C, D15C.1 및 D15.2에서 D15C 가져 오기). 따라서 최종 테이블은 49 열에서 16 열로 통합됩니다.R 행은 그룹 (또는 고유 ID)별로 여러 열을 의미합니다.
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)
내가 전치 및 골재 사용하기 위해서는 다음과 같은 데이터 프레임에 편집 :
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
그러나, 다음과 같은 집계 ("AGG는"데이터 프레임 이름) 완료 370 초 걸렸습니다 . 문제는
agg <- aggregate(x = agg[, 2:ncol(agg)], by = list(ID = agg$ID), FUN = "mean", na.rm = T)
그래서 나는 data.table로 변환 데이터 테이블 방법을 실행 ...... 내가 기다리고 테이블 이런 종류의 100 년대를 가지고있다. 무엇이 잘못되었는지 확실하지
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]
하지만
몇 분 후 오류 메시지를 받았습니다. dt의 "head"부분을보기 위해 dt [1 : 5,1 : 5]를 사용할 수없고, head (dt)는 지붕을 통해 지나치는 많은 줄을 반환합니다. "head"도 볼 수 없습니다. 지금 무엇을 해야할지 모르겠다.ID를 하나의 열 (data.frame)로 나열하거나 테이블을 조 변경하고 ID를 첫 번째 행에 나열 할 수 있습니다 (data.table처럼). 어느 쪽이든, 데이터를 집계하는 더 빠른 방법이 있습니까? 대단히 감사합니다!
첫 번째 질문은 무엇입니까? 환영. 'data.table' 패키지처럼 data.table을 정말로 의미합니까? 'transpose'와'aggregate'를 시도했다면 사람들이 도울 수 있도록 시도한 정확한 명령을 제공하는 것이 가장 좋습니다. 'Data.table 메소드'가 무슨 의미인지 모르겠다. 아마도 Stack Overflow에 대한 좋은 질문을하기위한 가이드 라인이있을 것입니다. R 채팅방에서 조언을 구하십시오. –
죄송합니다. 명확하지 않았습니다. 더 자세한 내용을 제공하도록 편집했습니다. 희망은 지금 더 이해할 수 있습니다. – user1444754
훨씬 더 좋습니다. 감사합니다. 이것은 매우 빨리 대답하게 만들었습니다. –