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

时间:2016-03-17 06:18:23

标签: r dataframe average

我知道有人可能在过去读过这个问题但又重新发布了这个问题,因为之前的问题并不是很清楚。

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

例如:在ASP和RSP中,第一次两次观察的差异低于0.03,因此对于5109和5707的平均值,现在进行下一次观察(即第三次原因是第一次和第二次已经使用)ASP = 6.39 RSP = 6.28现在虽然第四次观察有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
  }
}

1 个答案:

答案 0 :(得分:0)

我会这样做,它不会退出你的输出,因为第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)