【发布时间】:2011-08-03 11:13:58
【问题描述】:
我有每小时记录一次的天气数据,以及每 4 小时记录一次的位置数据 (X,Y)。我想知道 X,Y 位置的温度。天气数据并不完全相同。因此,我为每个位置编写了这个循环,以扫描天气数据,寻找日期/时间中的“最近”并从该时间提取数据。问题是我编写它的方式,对于位置 #2,它会扫描天气数据,但不允许分配分配给位置 #1 的最接近的时间信息。假设位置 #1 和 2 是在下午 6 点和下午 6:10 的 10 分钟内拍摄的,最近的天气时间是下午 6 点。我无法选择允许下午 6 点的天气数据。我有点像这样设置它,因为我的位置数据集中有 200 个位置(比如 3 个月),我不希望它从天气数据的时间 0 开始,当我知道最近的天气数据只是为最后一个位置,也恰好是该数据集的 3 个月。下面是一些示例数据和我的代码。我不知道这是否有意义。
<h6>####Location data</h6>
<p>X Y DateTime <br />
1 2 4/2/2003 18:01:01
3 2 4/4/2003 17:01:33
2 3 4/6/2003 16:03:07
5 6 4/8/2003 15:03:08
3 7 4/10/2003 14:03:06
4 5 4/2/2003 13:02:00
4 5 4/4/2003 12:14:43
4 3 4/6/2003 11:00:56
3 5 4/8/2003 10:02:06</p>
<h2>2 4 4/10/2003 9:02:19</h2>
<p>Weather Data
DateTime WndSp WndDir Hgt
4/2/2003 17:41:00 8.17 102.86 3462.43
4/2/2003 20:00:00 6.70 106.00 17661.00
4/2/2003 10:41:00 6.18 106.00 22000.00
4/2/2003 11:41:00 5.78 106.00 22000.00
4/2/2003 12:41:00 5.48 104.00 22000.00
4/4/2003 17:53:00 7.96 104.29 6541.00
4/4/2003 20:53:00 6.60 106.00 22000.00
4/4/2003 19:41:00 7.82 105.00 7555.00
4/4/2003 7:41:00 6.62 105.00 14767.50
4/4/2003 8:41:00 6.70 106.00 17661.00
4/4/2003 9:41:00 6.60 106.00 22000.00
4/5/2003 20:41:00 7.38 106.67 11156.67
4/6/2003 18:07:00 7.82 105.00 7555.00
4/6/2003 21:53:00 6.18 106.00 22000.00
4/6/2003 21:41:00 6.62 105.00 14767.50
4/6/2003 4:41:00 7.96 104.29 6541.00
4/6/2003 5:41:00 7.82 105.00 7555.00
4/6/2003 6:41:00 7.38 106.67 11156.67
4/8/2003 18:53:00 7.38 106.67 11156.67
4/8/2003 22:53:00 5.78 106.00 22000.00
4/8/2003 1:41:00 5.78 106.00 22000.00
4/8/2003 2:41:00 5.48 104.00 22000.00
4/8/2003 3:41:00 8.17 102.86 3462.43
4/10/2003 19:53:00 6.62 105.00 14767.50
4/10/2003 23:53:00 5.48 104.00 22000.00
4/10/2003 22:41:00 6.70 106.00 17661.00
4/10/2003 23:41:00 6.60 106.00 22000.00
4/10/2003 0:41:00 6.18 106.00 22000.00
4/11/2003 17:41:00 8.17 102.86 3462.43</p>
<h2>4/12/2003 18:41:00 7.96 104.29 6541.0</h2>
.
weathrow = 1
for (i in 1:nrow(SortLoc)) {
t = 0
while (t < 1) {
timedif1 = difftime(SortLoc$DateTime[i], SortWeath$DateTime[weathrow], units="auto")
timedif2 = difftime(SortLoc$DateTime[i], SortWeath$DateTime[weathrow+1], units="auto")
if (timedif2 < 0) {
if (abs(timedif1) < abs(timedif2)) {
SortLoc$WndSp[i]=SortWeath$WndSp[weathrow]
SortLoc$WndDir[i]=SortWeath$WndDir[weathrow]
SortLoc$Hgt[i]=SortWeath$Hgt[weathrow]
} else {
SortLoc$WndSp[i]=SortWeath$WndSp[weathrow+1]
SortLoc$WndDir[i]=SortWeath$WndDir[weathrow+1]
SortLoc$Hgt[i]=SortWeath$Hgt[weathrow+1]
}
t = 1
}
if (abs(SortLoc$DateTime[i] - SortLoc$DateTime[i+1] < 50)) {
weathrow=weathrow
} else {
weathrow = weathrow+1
#if(weathrow = nrow(SortWeath)){t=1}
}
} #end while
}
【问题讨论】:
-
如果这是一个 R 问题,您能否提供一些易于使用的 R 格式的示例数据?即,少量的 dput(object) 就可以了。
-
R代码上面有一小部分数据。我不确定 dput(object) 是什么意思,因为我正在学习。
-
如果您将一个对象(变量)放入 dput(object) 中,它将输出其他人可以用来复制和粘贴您的部分数据的内容。