在数据框中查找并命名特定值

时间:2015-12-31 16:26:03

标签: r dataframe coordinates

我有一个带坐标的数据框df_1():

 lat      lon  
54.52501 6.295359
54.52501 6.295293
54.52502 6.294764
54.52503 6.294698
54.52503 6.294302
54.52504 6.294236
54.43791 6.386598
54.43790 6.386656
54.43790 6.386714
54.43790 6.386831
54.43790 6.386948
54.43789 6.387001 
54.43789 6.387124
54.43789 6.387183
54.43789 6.387241
54.52533 6.391403
54.52534 6.391336
54.52534 6.391270

此外,我有第二个数据帧df_2(),其坐标为风电场。这些坐标描述了多边形的角(= windfram区域)。

  lat_GTI        lon_GTI
  54.498434     6.315664
  54.541046     6.315695
  54.541013     6.416187
  54.451969     6.388373

我想做的事:向df_1()添加另一列,指定df_1的坐标是否在风电场多边形内。

我已经尝试过了。但它没有用。

df_1$test1 <- df_1 [df_1 == df_2] <- "OWF"

1 个答案:

答案 0 :(得分:2)

我不认为这四个点是一个矩形。最后一个经度是关闭的。但是,假设你有一个矩形,你可以使用这样的东西:

min_lat_GTI = min(df_2$lat_GTI)
max_lat_GTI = max(df_2$lat_GTI)
min_lon_GTI = min(df_2$lon_GTI)
max_lon_GTI = max(df_2$lon_GTI)

df_1$test1 <- ifelse(df_1$lat >= min_lat_GTI & df_1$lat <= max_lat_GTI & df_1$lon >= min_lon_GTI & df_1$lon <= max_lon_GTI), 'IN', 'OUT')

如果你想要一个更复杂的条件评估来确定一个点是否在多边形内,你可以编写一个测试它的函数,并在ifelse()语句中使用该函数。

更新:

要使用某个功能,您可以执行以下操作:

isInside <- function(lat, lon) {
  # Bunch of code that tests whether the lat/lon are inside the polygon
  # return TRUE if inside, FALSE otherwise
}

df_1$test1 <- ifelse(isInside(df_1$lat, df_1$lon), 'IN', 'OUT')