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”时的主要内容,如果未能解决你的问题,请参考以下文章