有没有办法通过使用包含字符串逻辑表达式的 if 语句来运行 for 循环?

问题描述 投票:0回答:0

我想找出数据集中每栋房屋到市中心圆形边界的距离。例如,当房子在巴黎(当然市中心也是巴黎)时,找到离市中心圆形边界最近的距离。我已经设法划定了我正在查看的 4 个城市中心的边界。所以从技术上讲,一个房子的距离可以计算到四个不同的边界。对于房子,我可以访问房子所在的city以及latitudelongitude。但是我想设置一个 for 循环,这样当我经过每栋房子时,R 能够查看它所在的城市,然后计算到该城市边界的距离。我数据中的城市名称作为因素,但可以转换为字符串。

这些是名为“house”的数据的前几个值

这是房屋坐标的外观(点变量)以及如何计算到“圆”是城市边界的边界的距离。

以下只是展示每个城市的市中心是如何分配的

# Define the latitude and longitude coordinates of city center
aarhus_center <- data.frame(lon = 10.203921, lat = 56.162939)
copenhagen_center<-data.frame(lon = 12.5804, lat = 55.6801)
odense_center<-data.frame(lon = 10.3883, lat = 55.3959)
aalborg_center<-data.frame(lon=9.9197,lat=57.048)


# Define the radius of the circle (in meters)
radius <- 500
# Define a function to convert meters to degrees of latitude and longitude
meters_to_degrees <- function(meters, latitude) {
  degrees_lat <- meters / 111319.9
  degrees_lon <- meters / (111319.9 * cos(latitude * pi / 180))
  return(list(degrees_lat = degrees_lat, degrees_lon = degrees_lon))
}

## Calculate the degrees of latitude and longitude
  #Copenhagen
    degrees_C <- meters_to_degrees(radius, copenhagen_center$lat)
  #Aarhus
    degrees_AAR <- meters_to_degrees(radius, aarhus_center$lat)
  #Odense
    degrees_O<-meters_to_degrees(radius, odense_center$lat)
  #Aalborg
    degrees_AAl<-meters_to_degrees(radius, aalborg_center$lat)
    


# Create a circle using the calculated coordinates and radius
  #Copenhagen
    circle_C <- data.frame(
      lon = copenhagen_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
      lat = copenhagen_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
    )
  #Aarhus
    circle_AAR <- data.frame(
      lon = aarhus_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
      lat = aarhus_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
    )
  #Odense
    circle_O <- data.frame(
      lon = odense_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
      lat = odense_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
    )
  #Aalborg
    circle_AAL <- data.frame(
      lon = aalborg_center$lon + degrees$degrees_lon * cos(seq(0, 2 * pi, length.out = 100)),
      lat = aalborg_center$lat + degrees$degrees_lat * sin(seq(0, 2 * pi, length.out = 100))
    )
r for-loop distance
© www.soinside.com 2019 - 2024. All rights reserved.