2014-04-24 3 views
1

데이터 세트는 회사 식별자 (문자열), 데이터 값의 세 열 및 날짜 (yyyymmdd)로 구성됩니다. 약 25,500 개의 고유 한 회사 식별자가 있으며 각각은 1973 년 1 월 1 일부터 현재까지 총 일곱 번째 행에 대한 현재 값을가집니다. 데이터 세트의 각 날짜에 대한 통계 (예 : 범위, 평균, 중간 값, 표준 편차 등)를 계산하고 싶습니다. 데이터는 원래 csv 였고 데이터 프레임으로 R에 가져 왔습니다. 내 첫 번째 시도는 다음과 같습니다 그러나보다 효율적인 R에서이 작업을 수행하는 옵션의 과다가있다 25,000 행데이터 세트의 각 달 평균 데이터 찾기

stat <- data.frame(Date=as.Date(character()), Mean=numeric(), SD=numeric(), Quant_75=numeric(), Quant_25=numeric(), Range=numeric(), stringsAsFactors=FALSE) 
uniq <- unique(unlist(data$Date)) 
for (i in 1:length(uniq)){ 
data_sub <- subset(data, date == uniq[i]) 
stat[i,] = rbind(date, mean(data_sub), sd(data_sub), quantile(data_sub, 0.75), quantile(data_sub,0.25), range(data_sub)) 
} 

답변

0

통해 반복 이상의 방법이 있는지 궁금 해서요 : plyr와 같은 그들 native to R의 몇 가지 다른 사람들이 sqldf에는 자체 패키지가 있습니다. 큰 데이터 세트에서 속도가 빠르기 때문에 나는 data.table 패키지를 권했다. 같은 데이터 뭔가 :

require(data.table) 
data = data.table(data) 
data[,list(AVG_BY_DAY:=mean(COLNAME1,na.rm=T),SD_BY_DAY:=sd(COLNAME2,na.rm=T,Q_75_BY_DAY=quantile(COLNAME3,0.75))),by="Date"] 
data[,list(AVG_BY_COMPANY:=mean(COLNAME1,na.rm=T),SD_BY_COMPANY:=sd(COLNAME2,na.rm=T,Q_75_BY_COMPANY=quantile(COLNAME3,0.75))),by="Company"] 

체크 아웃 this link, 그것은 R.

+0

위대한 링크 및 응답 작품으로 데이터를 처리하는 사람에게 도움이 될 수 있습니다. – user6893

+0

사실 다음과 같은 오류가 발생합니다. ': ='(AVG_BY_DAY, 평균 (technical $ PRC, na.rm = T)) 오류 : is.data.table (DT) == TRUE를 확인하십시오. 그렇지 않으면 : =와': ='(...)은 j에서 한 번만 사용되며 특별한 방법으로 사용되도록 정의됩니다. 도움말 (": =")을 참조하십시오. – user6893

+1

당신은 data.table 이름을 지정할 필요가 없습니다. 그래서 ": = = (AVG, 평균 (PRC, na.rm = T))"로 충분할 것입니다. 또한 PRC가 숫자이고 인자가 아닌지 확인하십시오.': ='(AVG = mean) 표기법을 사용하면': ='주위의 역 따옴표를 잊지 마십시오 (주석에서 보이지 않음) (AVG : = mean (...), SD : = sd (...)') 대신에 (PRC, na.rm = T), SD = sd (PRC, na.rm = T) –

관련 문제