查找数据集中每个月的平均数据

时间:2014-04-24 20:04:24

标签: r date dataframe

数据集由公司标识符(字符串),三列数据值和日期(yyyymmdd)组成。大约有25,500个唯一的公司标识符,每个标识符从1973年1月1日到现在每天都有大约700,000行的每日值。我想要做的是计算数据集中每个日期的一些统计数据(即范围,均值,中位数,SD等)。这些数据最初是一个csv,并作为数据帧导入到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) )
}

1 个答案:

答案 0 :(得分:0)

在R中执行此操作有很多选项:其中几个native to R,其他像plyrsqldf都有自己的包。我建议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中的数据的任何人都有用。