【发布时间】:2015-09-24 05:41:02
【问题描述】:
我有一种情况,我目前使用非常耗时的循环。
我的数据集: SPECIE(3列data.frame); WORLD(3 列矩阵)
在 SPECIE 中,我有 3 个变量:LAT、LON、OCC(数字) OCC 始终 > 0。SPECIE 包含找到该物种的位置,以及找到它的次数(在 OCC 中)。 SPECIE的长度通常在3000左右。
在 WORLD 中,我拥有世界上所有的经纬度(网格 -180 到 180,-90 到 90,res 0.5) 所以,在WORLD,我有:LAT、LON、OCC OCC 通常为 0。WORLD 的长度为 259200 (180 * 2 * 360 * 2) x 3columns
我的目标:在发现该物种的世界中修改 OCC。最后,我得到了世界上所有的纬度/经度,以及是否在精确的纬度/经度对中找到了该物种的信息。
目前,我这样做:
for(j in 1:259200)
{
for(k in 1:length(SPECIE$OCC))
{
if((SPECIE$LON[k] == WORLD[j,1]) & (SPECIE$LAT[k] == WORLD[j,2]))
{
WORLD[j,3] <- SPECIE$OCC[k]
}
}
}
我寻找了一个没有循环的解决方案(这需要几个小时),但没有找到可行的方法。
头:
> head(WORLD)
[,1] [,2] [,3]
[1,] -179.75 -89.75 0
[2,] -179.75 -89.25 0
[3,] -179.75 -88.75 0
[4,] -179.75 -88.25 0
> head(SPECIE)
LON LAT OCC
1 -89.75 24.75 1
2 -89.75 25.25 1
3 -89.75 25.75 6
4 -89.75 26.25 45
非常感谢!
【问题讨论】:
标签: r replace dataframe data.table conditional-statements