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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了apply.weeky函数突然返回“'x'必须是数字”,仅当使用“ sum”或“ 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返回以下内容。

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具有类字符。

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类对象将数据保存在矩阵内。 R中的矩阵只能具有一类列。

以上是关于apply.weeky函数突然返回“'x'必须是数字”,仅当使用“ sum”或“ colSums”时的主要内容,如果未能解决你的问题,请参考以下文章

Oracle contains 函数

python当中的eval()函数是起啥作用?

MATLAB中空字符的判断

python如何将ascii码转换为字母

11.11函数对象,名称空间,作用域,命名关键字参数

ajax返回一个Map类型数据'a':'1','b':'2','c':'3'怎么取值?