求反方向的平均值列,并返回R中这些平均值的总和

求反方向的平均值列,并返回R中这些平均值的总和,r,function,R,Function,我刚刚开始学习R用于预测和分析目的,我决定尝试为我使用的预测模型创建一个完整的包(加法拾取)。我在一家酒店工作,我经常做的一件事就是预测我们的需求,所以这肯定会让我的这部分工作更快更容易 我已经创建了一些函数,这些函数将获得我的皮卡号码的数据帧,现在我正在开发一个函数来平均新数据帧中用户定义的列数。我已经包含了创建一些示例数据的代码,下面是我正在处理的代码 样本数据: test = data.frame(replicate(10, sample(0:2, 32, rep = TRUE))) 破

我刚刚开始学习R用于预测和分析目的,我决定尝试为我使用的预测模型创建一个完整的包(加法拾取)。我在一家酒店工作,我经常做的一件事就是预测我们的需求,所以这肯定会让我的这部分工作更快更容易

我已经创建了一些函数,这些函数将获得我的皮卡号码的数据帧,现在我正在开发一个函数来平均新数据帧中用户定义的列数。我已经包含了创建一些示例数据的代码,下面是我正在处理的代码

样本数据:

test = data.frame(replicate(10, sample(0:2, 32, rep = TRUE)))
破译代码:

averagePickup = function(data, day, periods) {
  # data will be your Pickup Data
  # day is the day you're forecasting for (think row number)
  # periods is the period or range of periods that you need to average (a column or range of columns).
 pStart = ncol(data)
 pEnd = ncol(data) - periods
 row = (day-1)
 new_frame = as.data.frame(matrix(nrow = 1, ncol = periods))

 for(i in pStart:pEnd) {
    new_frame[1,i] = mean(data[1:row , i])
  }
 return(sum(new_frame[1,1:i]))
}
其目标是从数据中的最后一列向后迭代到用户定义的周期。例如,将“periods”设置为1应仅返回最后一列的平均值之和。将其设置为2将产生最后一列和倒数第二列的平均值之和

然而,当我尝试运行此测试时,我得到一个错误


[中的错误我认为这就是您想要的:

averagePickup = function(data, day, periods) {
  # data will be your Pickup Data
  # day is the day you're forecasting for (think row number)
  # periods is the period or range of periods that you need to average (a column or range of columns).
  pStart = ncol(data)
  pEnd = ncol(data) - (periods-1)
  row = (day-1)
  new_frame <- as.data.frame(matrix(nrow = 1, ncol = periods))

  for(i in pStart:pEnd) {
    new_frame[1,1+abs(ncol(data)-i)] <- mean(data[1:row , i])
  }
  return(sum(new_frame[1,1:ncol(new_frame)]))
}

averagePickup(test,1,5)
averagePickup=函数(数据、日期、时段){
#数据将是您的取货数据
#day是您预测的日期(想想行数)
#periods是需要平均的时段或时段范围(列或列范围)。
pStart=ncol(数据)
pEnd=ncol(数据)-(周期-1)
行=(第1天)

新框架我想这就是你想要的:

averagePickup = function(data, day, periods) {
  # data will be your Pickup Data
  # day is the day you're forecasting for (think row number)
  # periods is the period or range of periods that you need to average (a column or range of columns).
  pStart = ncol(data)
  pEnd = ncol(data) - (periods-1)
  row = (day-1)
  new_frame <- as.data.frame(matrix(nrow = 1, ncol = periods))

  for(i in pStart:pEnd) {
    new_frame[1,1+abs(ncol(data)-i)] <- mean(data[1:row , i])
  }
  return(sum(new_frame[1,1:ncol(new_frame)]))
}

averagePickup(test,1,5)
averagePickup=函数(数据、日期、时段){
#数据将是您的取货数据
#day是您预测的日期(想想行数)
#periods是需要平均的时段或时段范围(列或列范围)。
pStart=ncol(数据)
pEnd=ncol(数据)-(周期-1)
行=(第1天)

新的框架我相信这正是你想要的:

colMeans将返回每列的平均值

colMeans(test)
     X1      X2      X3      X4      X5      X6      X7      X8      X9     X10 
1.15625 1.00000 0.90625 1.03125 1.15625 1.09375 0.81250 0.93750 1.15625 0.84375 
现在,您只需要最后的
x
列,而不是每列。
dim
将为您提供矩阵/数据帧的维度,第二个值是列数

dim(test)[2]
现在,您可以动态地子集数据帧

test[, (dim(test)[2] - x):dim(test)[2]]
最后,将子集数据帧插入
colMeans
函数,并在其周围包装一个
sum

sum(colMeans(test[, (dim(test)[2] - x):dim(test)[2]]))

我相信这正是你想要的:

colMeans将返回每列的平均值

colMeans(test)
     X1      X2      X3      X4      X5      X6      X7      X8      X9     X10 
1.15625 1.00000 0.90625 1.03125 1.15625 1.09375 0.81250 0.93750 1.15625 0.84375 
现在,您只需要最后的
x
列,而不是每列。
dim
将为您提供矩阵/数据帧的维度,第二个值是列数

dim(test)[2]
现在,您可以动态地子集数据帧

test[, (dim(test)[2] - x):dim(test)[2]]
最后,将子集数据帧插入
colMeans
函数,并在其周围包装一个
sum

sum(colMeans(test[, (dim(test)[2] - x):dim(test)[2]]))

请包含数据以使此可再现性…这可能会有帮助…您可以使用此代码获得与我正在使用的类似的帧。test=data.frame(replicate(10,sample(0:2,32,rep=TRUE)))应用于我的代码,我想从第X10列开始。让我知道是否还有其他更清楚的内容!
Day
将是行号,
periods
是列号。基本上,每行是一周中的一天,每列是一个观察期。如果您将
Day
设置为11和
periods
对于1,该函数应该取第1列中前10个观察值的平均值。我在从左到右的列上能够实现这一点,但在从右到左的列上似乎无法实现这一点。请包含数据以使这一点重现……这可能会有帮助……您可以使用此代码获得类似于我正在使用的.test=data.frame(复制(10,sample(0:2,32,rep=TRUE)))应用于我的代码,我想从第X10列开始。让我知道是否还有其他更清楚的内容!
Day
将是行号,
periods
是列号。基本上,每行是一周中的一天,每列是一个观察期。如果您将
Day
设置为11和
periods
对于1,函数应该取第1列中前10个观察值的平均值。在从左到右的列上,我能够使它工作,但似乎无法使它从右到左工作。这很接近,但不幸的是,它没有考虑到我不一定需要整个列的平均值这一事实。o这个答案让它在选择我想要表达的价值时更加动态,这是避免包含“未来”的必要条件平均值中的观察结果。如果我误解了你的代码,请告诉我,我对这一切还是很陌生的!如果你需要用第1行到第Y行来子集df,你可以将这些行添加为子集中的第一个参数。你的问题中已经包含了该语法。在上面的示例中,这将是sum(colMeans)(test)[1:行,…这很接近,但不幸的是,它没有考虑到我不一定要整个列的平均值这一事实。另一个答案允许它在选择我要一起表示的值时更加动态,这是避免包含“未来”所必需的平均值中的观察结果。如果我误解了你的代码,请告诉我,我对这一切还是很陌生的!如果你需要用第1行到第Y行来子集df,你可以将这些行添加为子集中的第一个参数。你的问题中已经包含了该语法。在上面的示例中,这将是sum(colMeans)(test)[1:行,…是的,这太完美了!现在因为我是一个彻头彻尾的noob和learning,我想确保我理解了您所做的更改。您将
pEnd
更改为包含
(句点-1)
,我猜它允许
pEnd
pStart
的值相同,当
periods
为1时。我看到的唯一其他更改是