我的数据集有以下 3 列:
date client_id sales
01/01/2012 client 1 $1000
02/01/2012 client 1 $900
...
...
12/01/2014 client 1 $1000
01/01/2012 client 2 $300
02/01/2012 client 2 $450
...
..
12/01/2014 client 2 $375
Run Code Online (Sandbox Code Playgroud)
等等其他 98 个客户(每个客户每月 24 个数据点)
我有多个客户(大约 100 个)...每个客户的数据采用时间序列格式(每月 24 个数据点)
如何使用 R 中的 auto.arima 自动预测所有 100 个客户的销售额?有 by 语句选项吗?还是我必须使用循环?
谢谢
我有一张桌子sql-server-2016:
CREATE TABLE #tempData (A int not null)
INSERT INTO #tempData VALUES (0);
GO
Run Code Online (Sandbox Code Playgroud)
现在我可以调用我的 R 脚本,将表作为输入数据(包括列名):
EXECUTE sp_execute_external_script
@language = N'R'
, @script = N'
df <- InputDataSet
df$B <- 1L'
, @input_data_1 = N'SELECT * FROM #tempData'
, @output_data_1_name = N'df'
WITH RESULT SETS (
(A int not null, B int not null)
);
Run Code Online (Sandbox Code Playgroud)
返回:
A B
0 1
Run Code Online (Sandbox Code Playgroud)
正如预期的那样。但是我可以在不指定名称{A,B} 的情况下执行相同操作吗,即它将data.frame直接使用来自 的名称。
这个问题与另一个问题R:sample()密切相关.我想在R中找到一种方法来列出k个数的所有排列,其总和为k,其中每个数字从0:k中选择.如果k = 7,我可以从0,1,...,7中选择7个数字.一个可行的解决方案是0,1,2,3,1,0,0另一个是1,1,1,1,1,1,1.我不想生成所有排列,因为如果k大于7,则会爆炸.
当然在k = 7的例子中我可以使用以下内容:
perms7<-matrix(numeric(7*1716),ncol=7)
count=0
for(i in 0:7)
for(j in 0:(7-i))
for(k in 0:(7-i-j))
for(l in 0:(7-i-j-k))
for(n in 0:(7-i-j-k-l))
for(m in 0:(7-i-j-k-l-n)){
res<-7-i-j-k-l-n-m
count<-count+1
perms7[count,]<-c(i,j,k,l,n,m,res)
}
head(perms7,10)
Run Code Online (Sandbox Code Playgroud)
但是,如何在不必编写(k-1)循环的情况下概括这种方法来解释任何k?我试图想出一个递归方案:
perms7<-matrix(numeric(7*1716),ncol=7) #store solutions (adjustable size later)
k<-7 #size of interest
d<-0 #depth
count=0 #count of permutations
rec<-function(j,d,a){
a<-a-j #max loop
d<-d+1 #depth (posistion)
for(i in 0:a ) {
if(d<(k-1)) rec(i,d,a)
count<<-count+1
perms7[count,d]<<-i
perms7[count,k]<<-k-sum(perms7[count,-k])
}
}
rec(0,0,k)
Run Code Online (Sandbox Code Playgroud)
但是卡住了,我不太确定这是正确的方法.想知道是否有任何"魔术"R功能,这个(虽然非常具体)问题或仅仅是它的一部分.
在k = 7的情况下,所有2.097.152排列和1.716总和为k = 7可以通过以下方式找到:
library(gtools)
k=7
perms <- …Run Code Online (Sandbox Code Playgroud)