我有一个3列,订单,放电,日期(数值)的大型数据集。有20年,每个订单每天排放价值观,它可以超越100替代循环和索引?
> head(dat)
Order Discharge date
1 0.04712 6574
2 0.05108 6574
3 0.00000 6574
4 0.00000 6574
5 3.54100 6574
6 3.61500 6574
延长对于给定的顺序X,我愿与平均更换放电值在该日期的x + 1和x-1的放电量。我一直以粗略的方式进行for循环和索引,但处理需要一个多小时。我知道必须有更好的方法。
x <- 4
for(i in min(dat[,3]):max(dat[,3]))
dat[,2][dat[,3] == i & dat[,1] == x ] <-
mean(c(dat[,2][dat[,3] == i & dat[,1] == x + 1],
dat[,2][dat[,3] == i & dat[,1] == x - 1]))
给人
> head(dat)
Order Discharge date
1 0.04712 6574
2 0.05108 6574
3 0.00000 6574
4 1.77050 6574
5 3.54100 6574
6 3.61500 6574
如果放于订单4,日期6574已替换为1.77050。它有效,但速度很慢。
我应该指定我不需要在每个订单上进行此计算,但只有少数几个(总共117个中只有8个)。基于这个答案,我有以下几点。
dat$NewDischarge <- by(dat$Discharge,dat$date,function(x)
colMeans(cbind(c(x[-1],NA), x,
c(NA, x[-length(x)])), na.rm=T))
我想还是想出一个办法只有选择订单的值进行计算和我停留在一个for循环和索引的日期和订单的车辙。
你有什么选择'x'的标准?是否有一个外部循环来确定你没有向我们展示'x'?这可能是相关的。 – Peyton
顺序代表测量河流流量的河流站点。 X-1和X + 1基本上是上游和下游的台站。我希望从上游和下游站的某一天的平均排放量中适用当天的中间站。我已经单独确定了这些x(有8个),但是我可以将它们放入一个向量中并将其包含在函数中。 – user2850039