私は、時系列データを集計するための関数に取り組んでいます。その中のいくつかは重み付けが必要です。この関数は、間隔レベルのデータを集計し、毎日、毎週、毎月、四半期、または毎年のレベルに集計できる必要があります。以下のコードは、関数から取り除かれると、期待される出力を生成し、xtsオブジェクトは適切な計算を行いますが、関数は出力しません。私は(私のトラブルシューティングを支援するために追加の印刷呼び出しで)以下の機能を作成しました:にNextMethodでなぜ関数内にオブジェクト長ゼロが作成されますが、外側にはありませんか?
エラー(:
agg_cc_xts = function(x, aht, sl, asa, handled, rcvd, period = c("daily",
"weekly",
"monthly",
"quarterly",
"yearly")){
x$wkld = x[,handled] * x[,aht]
x$sl_thresh = x[,rcvd] * x[,sl]
x$asa_calc = x[,handled] * x[,asa]
if(period == "daily"){
a = apply.daily(x[,rcvd], sum, na.rm = TRUE)
b = apply.daily(x[,handled], sum, na.rm = TRUE)
c = apply.daily(x$wkld, sum, na.rm = TRUE)
d = apply.daily(x$sl_thresh, sum, na.rm = TRUE)
e = apply.daily(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "monthly"){
a = apply.monthly(x[,rcvd], sum, na.rm = TRUE)
b = apply.monthly(x[,handled], sum, na.rm = TRUE)
c = apply.monthly(x$wkld, sum, na.rm = TRUE)
d = apply.monthly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.monthly(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "quarterly"){
a = apply.quarterly(x[,rcvd], sum, na.rm = TRUE)
b = apply.quarterly(x[,handled], sum, na.rm = TRUE)
c = apply.quarterly(x$wkld, sum, na.rm = TRUE)
d = apply.quarterly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.quarterly(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "yearly"){
a = apply.yearly(x[,rcvd], sum, na.rm = TRUE)
b = apply.yearly(x[,handled], sum, na.rm = TRUE)
c = apply.yearly(x$wkld, sum, na.rm = TRUE)
d = apply.yearly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.yearly(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "weekly"){
a = apply.weekly(x[,rcvd], sum, na.rm = TRUE)
b = apply.weekly(x[,handled], sum, na.rm = TRUE)
c = apply.weekly(x$wkld, sum, na.rm = TRUE)
d = apply.weekly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.weekly(x$asa_calc, sum, na.rm = TRUE)
}
}
}
}
}
print(paste(length(a), class(a), length(.index(a))))
print(paste(length(b), class(b), length(.index(b))))
print(paste(length(c), class(c), length(.index(c))))
print(paste(length(d), class(d), length(.index(d))))
print(paste(length(e), class(e), length(.index(e))))
print(head(a))
print(head(b))
print(head(c))
print(head(d))
print(head(e))
y = cbind.xts(a, b, c, d, e)
y$aht = y$wkld/y$handled
y$sl = y$sl_thresh/y$rcvd
y$asa = y$asa_calc/y$handled
drops = c("wkld", "sl_thresh", "asa_calc")
y = y[, !(names(y) %in% drops)]
return(y)
}
私が作成したデータセットにそれを実行すると、私はエラーを取得します。 dims [product 274]オブジェクトの長さに一致しません。
印刷呼び出しでは、各列の長さが同じで、同じ数の索引付け(索引付け)があり、オブジェクトまだ動物園/ xtsです。
私は下のサンプルデータでこれを実行している:私は答えられるために重要であると信じて質問がある
library(xts)
set.seed(12822)
dates = seq(as.Date("2016-01-01"),
as.Date("2016-09-30"), by="days")
RECEIVED = rnorm(n = length(dates), mean = 8000, sd = 650)
AHT = rnorm(n = length(dates), mean = 650, sd = 15)
HANDLED = RECEIVED - rnorm(n = length(dates), mean = 240, sd = 24)
SL = rnorm(n = length(dates), mean = .75, sd = .25/3.1)
ASA = rnorm(n = length(dates), mean = 46, sd = 13)
df = cbind(dates, RECEIVED, HANDLED, AHT, SL, ASA)
#make sure to use as.xts as the xts() call is used to make NEW xts objects
a.xts = as.xts(df[, -1], order.by = dates)
set.seed(2)
dates = seq(as.Date("2016-01-01"),
as.Date("2016-09-30"), by="days")
RECEIVED = rnorm(n = length(dates), mean = 4500, sd = 300)
AHT = rnorm(n = length(dates), mean = 700, sd = 20)
HANDLED = RECEIVED - rnorm(n = length(dates), mean = 135, sd = 13.5)
SL = rnorm(n = length(dates), mean = .65, sd = .30/3.1)
ASA = rnorm(n = length(dates), mean = 60, sd = 17)
df = cbind(dates, RECEIVED, HANDLED, AHT, SL, ASA)
b.xts = as.xts(df[, -1], order.by = dates)
all = rbind(a.xts, b.xts)
:
関数内で長さゼロのこのオブジェクトを生成していますか? このコードをコンソール内ではなく関数内で実行すると、なぜ生成されますか? この動作を回避または防止するにはどうすればよいですか?
これは非常に迅速な投票でした。質問をより良くするために私ができることを説明してください。ありがとうございました! –