所以基本上我在数据框中有两个独立的组:我有一个位置名称和相关的纬度和经度范围,然后我有一个精确的纬度和长值列表。我想要做的是每个EXACT lat / long对,遍历lat / long RANGE以查看该对是否在该范围内。如果是,我想写下纬度/长对旁边的位置名称。
所以,我的代码工作正常。但是,运行大约需要40分钟。我不知道这是否正常,或者我是以一种非常结构化/低效的方式做到这一点。任何想法和意见都将受到创造性的赞赏!
for (x in 1:35274) {
lat = test[x,9]
long = test[x,10]
for (y in 1:1198) {
if ((((test[y,3] <= lat) & (lat <= test[y,2])) &
((test[y,4] <= long) & (test[y,5] >= long))) == TRUE)
test[x,12] <- test[y,1]
}
}
答案 0 :(得分:0)
基本上,您在此处所做的只是选择test[,9]
和test[,10]
的前35274个条目,但您一次只能输入一个值。最好一次完成这一切:
n <- 1:35274
lat <- test[n,9]
long <- test[n,10]
然后,在你的35274循环中你再做1198个循环,这是很多运行的操作(42,258,252循环!)。这可能是您遇到问题的地方。这似乎也没有达到你想要的效果。基本上,对于任何给定的x
,如果多个y
满足条件,则只会写下最后的y
,并且之前的任何y
都将被覆盖。换句话说,如果有多个位置在纬度/经度范围内,那么只会记下一个位置。
假设您只希望每个x
有一个位置,只需执行以下操作即可将此减少为1198个循环:
m <- 1198
vec <- rep(NA,m)
for (y in 1:m){
ind <- (test[y,3] <= lat) & (test[y,2] >= lat) & (test[y,4] <= long) & (test[,5] >= long)
vec[y] <- test[which(ind),1]
}
如果可能有多个位置,只需使用lis <- list()
进行初始化,然后使用lis[y] <- test[which(ind),1]
进行存储。
也许有更好的方法可以做到这一点,但这应该可以节省你很多时间。