의 레코드 블록에 대한 시퀀스 번호를 생성 나는 (내 기준으로) 상당히 큰 데이터 집합을 가지고 있고 레코드의 블록 시퀀스 번호를 만들려고합니다. plyr 패키지를 사용할 수는 있지만 실행 시간이 매우 느립니다. 아래 코드는 비슷한 크기의 데이터 프레임을 복제합니다.는 R 데이터 프레임
## simulate an example of the size of a normal data frame
N <- 30000
id <- sample(1:17000, N, replace=T)
term <- as.character(sample(c(9:12), N, replace=T))
date <- sample(seq(as.Date("2012-08-01"), Sys.Date(), by="day"), N, replace=T)
char <- data.frame(matrix(sample(LETTERS, N*50, replace=T), N, 50))
val <- data.frame(matrix(rnorm(N*50), N, 50))
df <- data.frame(id, term, date, char, val, stringsAsFactors=F)
dim(df)
실제로이 값은 일반적으로 값이 크기 때문에 작업하는 것보다 약간 작지만이 정도면 충분합니다.
> system.time(test.plyr <- ddply(df,
+ .(id, term),
+ summarise,
+ seqnum = 1:length(id),
+ .progress="text"))
|===============================================================================================| 100%
user system elapsed
63.52 0.03 63.85
이 할 수있는 "더 나은"방법이 있나요 : 여기
내 컴퓨터에서 실행 시간인가? 불행히도, 나는 Windows 컴퓨터를 사용하고 있습니다.미리 감사드립니다.
편집 : Data.table가 매우 빠르고,하지만 난 내 일련 번호가 제대로 CALC 얻을 수 없습니다. 여기 내 ddply 버전이 만든 것입니다. 대부분은 그룹에서 하나 개의 기록을 가지고 있지만, 일부 등 2 행, 3 행,
> with(test.plyr, table(seqnum))
seqnum
1 2 3 4 5
24272 4950 681 88 9
그리고 아래 그림과 같이 data.table 사용하여 동일한 접근 수율이 있습니다
> with(test.dt, table(V1))
V1
1
24272
감사합니다. 해들리가 그 일을하고 있다는 것을 알고 있지만, 잠시 동안 나는 고침이 필요합니다. 속도 향상은 미친 짓이다. 내 컴퓨터에서 실행할 때 (test.df, table (V1)), 내가 볼 수있는 것은 시퀀스 번호 1입니다. 우리는 데이터를 시뮬레이트하고 있지만 일부 레코드에는 그룹화 내에서 둘 이상의 레코드가 있어야합니다. – Btibert3
문제는 data.table이 열을 다르게 정렬하는 것입니다. 당신은'머리 (plyr :: 정렬 (test.dt, ID를))'를 사용하는 경우, 당신은 출력이 도움을'test.plyr' – Ramnath
감사와 동일한 것을 볼 수 있습니다. 내 마지막에 가장 가능성이 큰 사용자 오류,하지만 상관없이, 내가 data.table 솔루션을 사용할 때 V1의 값은 1뿐입니다. 위 참조. – Btibert3