首页 > 解决方案 > r 对象列表 POINT(坐标)

问题描述

我有一个带有名称、Lon 和 Lat 的数据框 a.fil。name1 43.37390 132.9703 name2 43.35311 132.7493 我创建对象 POINT

point1.sfg <- st_point(unname(unlist(a.fil[1, 2:3])))
point2.sfg <- st_point(unname(unlist(a.fil[2, 2:3])))

类(point1.sfg)[1]“XY”“点”“sfg”

我需要创建对象列表 POINT

ll <- list(point1.sfg, point2.sfg)

类(ll[[1]])[1]“XY”“点”“sfg”

但是,我的数据框包含 1000 行如果我用于...

i <- 1
for (i in 1:nrow(a.fil)) {
  ll[i] <- st_point(unname(unlist(a.fil[i, 2:3])))
}

我得到了带有 nrow() 元素的列表,但是......

类(ll [[1]])[1]“数字”

如何从此数据框中创建对象 POINT 列表?非数字

帮我!

标签: rlistpoint

解决方案


从一个data.frame你可以创建一个sf对象

library(sf)

df <- data.frame(
    name = c("a","b","c")
    , lon = 1:3
    , lat = 3:1
)

sf <- sf::st_as_sf( df, coords = c("lon","lat" ) )
sf

# Simple feature collection with 3 features and 1 field
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 1 ymin: 1 xmax: 3 ymax: 3
# CRS:            NA
#   name    geometry
# 1    a POINT (1 3)
# 2    b POINT (2 2)
# 3    c POINT (3 1)

那么 POINT 的列表就是几何列

sf$geometry
# Geometry set for 3 features 
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: 1 ymin: 1 xmax: 3 ymax: 3
# CRS:            NA
# POINT (1 3)
# POINT (2 2)
# POINT (3 1)

str( sf$geometry )
# sfc_POINT of length 3; first list element:  'XY' num [1:2] 1 3

如果你真的想要一个 POINT 对象列表,你可以删除sfc该类

unclass( sf$geometry )
# [[1]]
# POINT (1 3)
# 
# [[2]]
# POINT (2 2)
# 
# [[3]]
# POINT (3 1)

推荐阅读