【发布时间】:2011-10-17 17:45:18
【问题描述】:
我有一个包含三列的数据框:Id、Date 和 Value,并希望按平均值对其进行下采样:取接下来的 20 行,从这 20 行中构建 Value 的平均值并将其添加到具有相同结构的新数据框。 Date 应该是 20 行的第一个值。
我试过这种方式(可能很可怕:):
resample.downsample <- function(data, by=20)
{
i <- 0
nmax <- nrow(data)
means <- c()
while(i < nmax)
{
means <- c(means, mean(subset(data, Id > i & Id <= i+by)$Value))
i <- i+by
}
return (
data.frame(
Id = seq(1, length.out=(nmax/by), by=1),
Date = seq(startDate, length.out=(nmax/by), by=(1/by)),
Value = means
)
)
}
这适用于小型数据集,但在我的真实数据集(约 4000000 行)上永远运行。任何想法如何优化此功能?
Sample-Data(输入、输出应具有相同的结构,类:整数、数字、POSIXct/POSIXt):
Value Id Date
1 125 1 2011-06-30 22:41:50
2 127 2 2011-06-30 22:41:50
3 126 3 2011-06-30 22:41:50
4 123 4 2011-06-30 22:41:50
5 130 5 2011-06-30 22:41:50
6 131 6 2011-06-30 22:41:50
7 128 7 2011-06-30 22:41:50
【问题讨论】:
-
一些数据样本会有所帮助...我不确定日期和 ID 的格式。
标签: r