我正在尝试汇总一个数据框架,以获取一个包含每周平均值的变量表。我发现以下软件包提供了一个不错的解决方案,并且我一直在使用它来每年和每月汇总数据。但是,每周汇总数据的功能根本无法按所述方式工作。有谁知道我该如何解决?
例如,遵循手册:

require(TSAgg)
#Load the data:
data(foo)

##Format the data using the timeSeries function.
foo.ts<-timeSeries(foo[,1],  "%d/%m/%Y  %H:%M",foo[,3])

##Aggregate the data into 6 days blocks using max
(mean.month <- monthsAgg(foo.ts,mean,6))

#Aggregate the data into weeks, using 7 days and mean:
(foo.week<-daysAgg(foo.ts,mean,7) )

最后一个命令不起作用。该函数如下:
daysAgg <-
function (data, process, multiple = NULL, na.rm = FALSE)
{
    if (is.null(multiple)) {
        multiple = 1
    }
    if (multiple == 1) {
        day <- aggregate(data[, 8:length(data)], list(day = data$day,
            month = data$month, year = data$year), process, na.rm = na.rm)
        days <- ymd(paste(day$year, day$month, day$day))
        data2 <- data.frame(date = days, data = day[, 4:length(day)])
        names(data2) <- c("Date", names(data[8:length(data)]))
        return(data2)
    }
    temp <- data
    day <- aggregate(list(data[, 8:length(data)], count = 1),
        list(day = data$day, month = data$month, year = data$year),
        process, na.rm = na.rm)
    days <- ymd(paste(day$year, day$month, day$day))
    data <- data.frame(date = days, day[, 5:length(day) - 1],
        count = day[length(day)])
    days = paste(multiple, "days")
    all.dates <- seq.Date(as.Date(data$date[1]), as.Date(data$date[length(data[,
        1])]), by = "day")
    dates <- data.frame(date = all.dates)
    aggreGated <- merge(dates, data, by = "date", all.x = TRUE)
    aggreGated$date <- rep(seq.Date(as.Date(data$date[1]), as.Date(data$date[length(data[,
        1])]), by = days), each = multiple, length = length(all.dates))
    results <- aggregate(list(aggreGated[2:length(aggreGated)]),
        list(date = aggreGated$date), process, na.rm = TRUE)
    results <- subset(results, results$count != 0)
    results <- results[, -length(results)]
    names(results) <- c("Date", names(temp[8:length(temp)]))
    return(results)
}

最佳答案

代码中的问题源于对函数ymd的使用,该函数在输出的所有日期的末尾附加“UTC”。通过使用再次定义ymd可以重载函数

ymd <- function(x) {
    as.Date(x, "%Y %m %d")
}

在致电daysAgg之前。

关于r - 按周或几天汇总数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26131206/

10-12 17:19
查看更多