【发布时间】:2013-10-12 15:33:52
【问题描述】:
我有一个包含 3 列的大型数据集,Order、Discharge、Date(数字)。每个订单有 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?这可能是相关的。 -
Order 表示河流中测量流量的站点。 X-1 和 X+1 本质上是上游站和下游站。我想取上游和下游站点一天的平均排放量来申请当天的中间站点。我已经单独识别了这些 x(有 8 个),但我可以将它们放在一个向量中并将其包含在函数中。