apply.weeky 函数仅在使用 "sum" 或 "colSums" 时突然返回“'x' 必须是数字”

apply.weeky function is suddenly returning "'x' must be numeric" only when using "sum" or "colSums"

我一直在从 csv 导入数据,然后将其放入数据框中。然后我填充它,将其转换为 XTS。之后,我使用 apply.weekly 将其分解为每周数据。代码如下。

library(padr)
library(xts)
library(tidyr)
library(seasonal)
library(forecast)]
library(lubridate)
library(tidyverse)
library(zoo)

df <- data.frame(data$f1.date[1:831], data.$f1[1:831])  #create data frame
colnames(df)<- c('date', 'f1')
df$date <- (as.Date(df$date, format='%m/%d/%Y'))
df<-pad(df)  # add missing dates


df<-xts(df, order.by = df$date)
df$t1<-replace_na(df$f1,0)  # Add Zeros for NA vals

dtw<-apply.weekly(df$f1,FUN=colSums) # I've tried using sum, colSums and mean.  Mean works fine.

然而,sum 或 colSums returns 以下。

Error in FUN(x[(INDEX[y] + 1):INDEX[y + 1]], ...) : 'x' must be numeric

到目前为止,我唯一的想法是尝试 df$t1<-as.numeric(df$t1),但那没有效果。

有人对此有什么建议吗?这个确切的脚本在同一个 csv 文件上运行良好,我认为没有任何改变。我能想到的是某些包没有加载。

下面是我的数据样本,完整版本大约有 800 行。我正在努力让它现在可以重现。

使用 dput(head(df)) 给了我这个。

structure(c("2010-01-01", "2010-01-02", "2010-01-03", "2010-01-04", 
"2010-01-05", "2010-01-06", " 1", "0", "0", "0", "0", "0"), class = c("xts", 
"zoo"), index = structure(c(1262304000, 1262390400, 1262476800, 
1262563200, 1262649600, 1262736000), tzone = "UTC", tclass = "Date"), .Dim = c(6L, 
2L), .Dimnames = list(NULL, c("date", "f1")))

为了保持一致性,我还对其进行了编辑,将 't1' 更改为 'f1'。

谢谢

问题是您的列 f1 是 class 个字符。

is.character(df$f1)
[1] TRUE

一种方法是在您的 apply.weekly 调用中将其转换为数字:

apply.weekly(df$f1,function(x){sum(as.numeric(x))})
           f1
2010-01-03  1
2010-01-06  0

所有这一切的原因是因为 xts class 对象将数据保存在矩阵中。 R 中的矩阵只能有一个 class 列。