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 列。
我一直在从 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 列。