相对于 R 中其他列的列平均值



我知道有人过去可能读过这个问题,但再次转发它,因为早些时候的问题不是很清楚。

我有 4 个变量(Id、ASP、RSP、Volume)的数据框,如果 ASP 和 RSP 的连续值之间的绝对差在 +-0.03 之间,我想要的是取交易量的平均值。

例如:在ASP和RSP中,第一个观测值的差异低于0.03,

因此对于平均值5109和5707,现在采取下一个观测值(即第三个原因1st和2nd已经使用)ASP=6.39 RSP=6.28现在虽然第4个观测值的差异低于0.03,但我们不能俱乐部交易量,因为它在不同的Id 2202下,所以保持相同,依此类推。

数据:

df1 <- data.frame(Id = c(2201, 2201, 2201, 2202,2202), 
                      ASP= c(6.29, 6.31, 6.39, 6.39,6.36),
                      RSP= c(6.29,6.28,6.28,6.36,6.36),
                      Vol= c(5109, 5707, 5999, 5853,6590))

代码:(我不知道如果条件失败,如何取平均音量,所以采取 1 和零 :( )

n=dim(s)[1]
diff_asp_max=s$ASP[1]+0.03
diff_RSP_max=s$RSP[1]+0.03
diff_asp_min=s$ASP[1]-0.03
diff_RSP_min=s$RSP[1]-0.03

for ( i in 1:n)
{
  if (s$ASP[i]< diff_asp_max & s$ASP[i]>diff_asp_min & s$RSP[i]>diff_RSP_min & s$RSP[i]< diff_RSP_max & s$diff_StoreId[i]!=1)
  {
    s$a[i]<- 1
  }
  else
  {

    s$a[i]=0
    diff_asp_max=s$ASP[i]+0.03
    diff_RSP_max=s$RSP[i]+0.03
    diff_asp_min=s$ASP[i]-0.03
    diff_RSP_min=s$RSP[i]-0.03
  }
}

我会这样做,它不会退出您的输出,因为第 2 行仍然存在,在我看来,组 2202 实际上满足您的平均值标准。

ls1 <- split(df1,df1$Id)
ls2 <- lapply(ls1,function(x) {
  x$ASP_diff <- c(0,abs(diff(x$ASP)))
  x$RSP_diff <- c(0,abs(diff(x$RSP)))
  x$MeanVol <- ifelse(x$ASP_diff < 0.03 & x$ASP_diff < 0.03,mean(x[x$ASP_diff < 0.03 & x$ASP_diff < 0.03,"Vol"]),x$Vol)
  return(x[,c(1:4,7)])})
unsplit(ls2,df1$Id)

最新更新