我知道有人可能在过去读过这个问题但又重新发布了这个问题,因为之前的问题并不是很清楚。
我有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
}
}
答案 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)