【发布时间】:2019-07-18 12:26:57
【问题描述】:
我有一个两列的数据框,第一是经度,第二是纬度。我想找到中心单元格的坐标。 例如范围是 lat[31 31.5], lon[33 33.5] 如果两列的第一个值满足此条件,则创建第三列并放入值 31.25 并创建第四列并将值放入其中 33.25
我尝试过嵌套for循环,但它不起作用
# my dataframe is cycle8 contain 166 rows and two columns
latitude<- seq(31,37,by=0.5)
longitude<- seq(33,37,by=0.5)
cycle8$latcenter<- 0
cycle8$loncenter<-0
for (m in 1:nrow(cycle8))
{
for(j in seq_along(latitude))
{
for(k in seq_along(longitude))
{
if (cycle8$lat[m]>=j && cycle8$lat[m]<=j+0.5 && cycle8$lon[m]>=k &&
cycle8$lon[m]<=k+0.5)
{
cycle8$latcenter[m]<- j+0.25
cycle8$loncenter[m]<- k+0.25
}
}
}
}
以下代码可以运行并提供所需的结果,但它很长并且需要大量的语句输入
cycle8$latcenter<- 0
for (m in 1:nrow(cycle8))
{
if (cycle8$lat[m]>=31 && cycle8$lat[m]<=31.5 )
{
cycle8$latcenter[m]<- 31+0.25
}
else if
(cycle8$lat[m]>=31.5 && cycle8$lat[m]<=32 ){
cycle8$latcenter[m]<- 31.5+0.25
}
else if
(cycle8$lat[m]>=32 && cycle8$lat[m]<=32.5 ){
cycle8$latcenter[m]<- 32+0.25
}
else if
(cycle8$lat[m]>=32.5 && cycle8$lat[m]<=33 ){
cycle8$latcenter[m]<- 32.5+0.25
}
else if
(cycle8$lat[m]>=33 && cycle8$lat[m]<=33.5 ){
cycle8$latcenter[m]<- 33+0.25
}
else if
(cycle8$lat[m]>=33.5 && cycle8$lat[m]<=34 ){
cycle8$latcenter[m]<- 33.5+0.25
}
else if
(cycle8$lat[m]>=34 && cycle8$lat[m]<=34.5 ){
cycle8$latcenter[m]<- 34+0.25
}
else if
(cycle8$lat[m]>=34.5 && cycle8$lat[m]<=35 ){
cycle8$latcenter[m]<- 34.5+0.25
}
else if
(cycle8$lat[m]>=35 && cycle8$lat[m]<=35.5 ){
cycle8$latcenter[m]<- 35+0.25
}
else if
(cycle8$lat[m]>=35.5 && cycle8$lat[m]<=36 ){
cycle8$latcenter[m]<- 35.5+0.25
}
else if
(cycle8$lat[m]>=36 && cycle8$lat[m]<=36.5 ){
cycle8$latcenter[m]<- 36+0.25
}
else if
(cycle8$lat[m]>=36.5 && cycle8$lat[m]<=37 ){
cycle8$latcenter[m]<- 36.5+0.25
}
}
【问题讨论】:
-
在您的示例中,有 [31 31.5] 之外的 lat 值,但预期输出会根据您描述的满足此条件的值对它们进行四舍五入。所以对我来说,您似乎只是想四舍五入 0.25?
-
在我的代码中,我添加了数据框“cycle8”,我有 166 个纬度值和 166 个经度值。如果这些纬度和经度属于范围,我想进行测距,那么我想创建包含范围中心值的新列
-
我这里只上传了前十行,其余行包含更多的lon和lat的值我想检查以下范围lat [31 31.5],[31.5 32],[32 32.5], [32.5 34] 依此类推,直到 [36.5 37],同样地,lon [33 33.5] 依此类推,直到 [36.5 37]
-
这个问题要更清楚,我会解释给你。 lon 列的第一个值是 33.350407 我想编写代码来检查这个值属于哪个范围,它属于 [33 33.5],然后在新列中放入这个范围中心的值,即 33.25