我一直在尝试汇总(有些不稳定的)每日数据。我实际上正在处理 csv 数据,但如果我重新创建它 - 它看起来像这样:
library(zoo)
dates <- c("20100505", "20100505", "20100506", "20100507")
val1 <- c("10", "11", "1", "6")
val2 <- c("5", "31", "2", "7")
x <- data.frame(dates = dates, val1=val1, val2=val2)
z <- read.zoo(x, format = "%Y%m%d")
现在我想每天汇总这个数据(请注意,有时一天有 >1 个数据点,有时则没有。
我尝试了很多很多的变体,但我似乎无法聚合,所以例如这失败了:
aggregate(z, as.Date(time(z)), sum)
# Error in Summary.factor(2:3, na.rm = FALSE) : sum not meaningful for factors
似乎有很多关于聚合的内容,我已经尝试了很多版本,但似乎无法在日常水平上总结这一点。除了每日求和之外,我还想运行 cummax 和累积平均值。
任何帮助将不胜感激。
Update
我实际使用的代码如下:
z <- read.zoo(file = "data.csv", sep = ",", header = TRUE, stringsAsFactors = FALSE, blank.lines.skip = T, na.strings="NA", format = "%Y%m%d");
看来我(无意)引用的上述数字与实践中发生的情况类似,因为当我这样做时:
aggregate(z, index(z), sum)
#Error in Summary.factor(25L, na.rm = FALSE) : sum not meaningful for factors
有很多列(100 左右),我如何自动将它们指定为 as.numeric ? (stringAsFactors = False
似乎不起作用?)