我一直试图聚合(一些不稳定的)每日数据.我实际上正在使用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")
Run Code Online (Sandbox Code Playgroud)
现在我想每天聚合这个(注意有时候一天有> 1个数据点,有时候也没有.
我已经尝试了很多很多变化,但我似乎无法聚合,所以例如这失败了:
aggregate(z, as.Date(time(z)), sum)
# Error in Summary.factor(2:3, na.rm = FALSE) : sum not meaningful for factors
Run Code Online (Sandbox Code Playgroud)
关于聚合似乎有很多内容,我尝试了很多版本,但似乎无法在日常水平上总结这一点.除了每日总结之外,我还想运行cummax和累积平均值.
任何帮助都会受到高度赞赏.
更新
我实际使用的代码如下:
z <- read.zoo(file = "data.csv", sep = ",", header = TRUE, stringsAsFactors = FALSE, blank.lines.skip = T, na.strings="NA", format = "%Y%m%d");
Run Code Online (Sandbox Code Playgroud)
似乎我(无意)引用上面的数字类似于实践中发生的事情,因为当我这样做时:
aggregate(z, index(z), sum)
#Error in Summary.factor(25L, na.rm = FALSE) : sum not meaningful for factors
Run Code Online (Sandbox Code Playgroud)
有很多列(100左右),我如何自动指定为as.numeric?(stringAsFactors = False似乎不起作用?)
或者你在使用zoo之前聚合(虽然val1和val2需要是数字).
x <- data.frame(dates = dates, val1=as.numeric(val1), val2=as.numeric(val2))
y <- aggregate(x[,2:3],by=list(x[,1]),FUN=sum)
Run Code Online (Sandbox Code Playgroud)
然后喂入y动物园.
你避免警告:)