library(sf)
DT <- data.frame(
lat1=c(-26.3, -27.1, -26.8),
long1=c(27.3, 28.5, 28.2),
lat2=c(-26.5, -26.9, -27.2),
long2=c(28.3, 27.5, 28.1)
)
DT$p1 <- st_geometry(st_as_sf(DT,coords = c("lat1","long1")))
DT$p2 <- st_geometry(st_as_sf(DT,coords = c("lat2","long2")))
我有一个包含2组经/纬度的数据框,我想将其转换为点。
DT$p1 <- st_geometry(st_as_sf(DT,coords = c("lat1","long1")))
提供了预期的结果,但
DT$p2 <- st_geometry(st_as_sf(DT,coords = c("lat2","long2")))
给我与DT $ p1相同的结果。
如果我更改这两个语句的顺序,都将给出(lat2,long2)的要点
如何创建每行多点的df?
答案 0 :(得分:0)
问题是st_geometry
创建了一个粘性列,用于标识sf对象的几何形状。对已存在且处于活动状态的几何列使用st_as_sf
会忽略任何其他指定几何列的尝试。为了创建第二个几何列,我们可以暂时删除sf类(使用(as.data.frame)。
library(sf)
DT = data.frame(
lat1=c(-26.3, -27.1, -26.8),
long1=c(27.3, 28.5, 28.2),
lat2=c(-26.5, -26.9, -27.2),
long2=c(28.3, 27.5, 28.1)
)
DT = st_as_sf(DT, coords = c("long1","lat1"), remove = FALSE)
DT$p2 = st_as_sf(as.data.frame(DT), coords = c("long2","lat2"))
DT
# Simple feature collection with 3 features and 4 fields
# Active geometry column: geometry
# geometry type: POINT
# dimension: XY
# bbox: xmin: 27.3 ymin: -27.1 xmax: 28.5 ymax: -26.3
# epsg (SRID): NA
# proj4string: NA
# lat1 long1 lat2 long2 geometry p2
# 1 -26.3 27.3 -26.5 28.3 POINT (27.3 -26.3) POINT (28.3 -26.5)
# 2 -27.1 28.5 -26.9 27.5 POINT (28.5 -27.1) POINT (27.5 -26.9)
# 3 -26.8 28.2 -27.2 28.1 POINT (28.2 -26.8) POINT (28.1 -27.2)
st_geometry(DT)
# Geometry set for 3 features
# geometry type: POINT
# dimension: XY
# bbox: xmin: 27.3 ymin: -27.1 xmax: 28.5 ymax: -26.3
# epsg (SRID): NA
# proj4string: NA
# POINT (27.3 -26.3)
# POINT (28.5 -27.1)
# POINT (28.2 -26.8)
另外,请注意,正确的坐标规范是x,y,因此long,lat不是lat,long