在 r 中使用 SF 只读取 shapefile 的第一行
Read only the first line of a shapefile using SF in r
我正在构建一个函数来为 R 中的 shapefile 生成元数据。
我的一个想法是获取 SF 中每一列的名称和 class(以防有大量 SF 而您不必等待读取所有数据来获取他们的名字),为此我正在研究 read_sf
函数,特别是查询参数。
按照此 link 中的示例,我看到您可以按列的值进行过滤以获得较小的数据集,例如:
library(sf)
nc = st_read(system.file("shape/nc.shp", package="sf"))
如果我事先知道列的名称,我可以用这样的东西进行过滤:
nc_sql = st_read(system.file("shape/nc.shp", package="sf"),
query = "SELECT NAME, SID74, FIPS FROM \"nc\" WHERE BIR74 > 20000")
当然,目标是获取列名,所以我想使用类似于我看到的东西 in this answer。
我在其他不成功的尝试中尝试过此代码:
nc_sql = st_read(system.file("shape/nc.shp", package="sf"),
query = "SELECT TOP 1 * FROM \"nc\"")
如有任何帮助,我们将不胜感激
使用rgdal::ogrInfo
ogrInfo(system.file("shape/nc.shp", package="sf"))
结果:
Source: "/home/sapi/R/x86_64-pc-linux-gnu-library/4.1/sf/shape/nc.shp", layer: "nc"
Driver: ESRI Shapefile; number of rows: 100
Feature type: wkbPolygon with 2 dimensions
Extent: (-84.32385 33.88199) - (-75.45698 36.58965)
CRS: +proj=longlat +datum=NAD27 +no_defs
LDID: 87
Number of fields: 14
name type length typeName
1 AREA 2 24 Real
2 PERIMETER 2 24 Real
3 CNTY_ 2 24 Real
4 CNTY_ID 2 24 Real
5 NAME 4 80 String
6 FIPS 4 80 String
7 FIPSNO 2 24 Real
8 CRESS_ID 0 9 Integer
9 BIR74 2 24 Real
10 SID74 2 24 Real
11 NWBIR74 2 24 Real
12 BIR79 2 24 Real
13 SID79 2 24 Real
14 NWBIR79 2 24 Real
您可以使用 read_sf 传递 SQL 查询。它应该是这样的
library(sf)
data = read_sf('file.gpkg', query = 'SELECT * from layername LIMIT 1')
我正在构建一个函数来为 R 中的 shapefile 生成元数据。
我的一个想法是获取 SF 中每一列的名称和 class(以防有大量 SF 而您不必等待读取所有数据来获取他们的名字),为此我正在研究 read_sf
函数,特别是查询参数。
按照此 link 中的示例,我看到您可以按列的值进行过滤以获得较小的数据集,例如:
library(sf)
nc = st_read(system.file("shape/nc.shp", package="sf"))
如果我事先知道列的名称,我可以用这样的东西进行过滤:
nc_sql = st_read(system.file("shape/nc.shp", package="sf"),
query = "SELECT NAME, SID74, FIPS FROM \"nc\" WHERE BIR74 > 20000")
当然,目标是获取列名,所以我想使用类似于我看到的东西 in this answer。
我在其他不成功的尝试中尝试过此代码:
nc_sql = st_read(system.file("shape/nc.shp", package="sf"),
query = "SELECT TOP 1 * FROM \"nc\"")
如有任何帮助,我们将不胜感激
使用rgdal::ogrInfo
ogrInfo(system.file("shape/nc.shp", package="sf"))
结果:
Source: "/home/sapi/R/x86_64-pc-linux-gnu-library/4.1/sf/shape/nc.shp", layer: "nc"
Driver: ESRI Shapefile; number of rows: 100
Feature type: wkbPolygon with 2 dimensions
Extent: (-84.32385 33.88199) - (-75.45698 36.58965)
CRS: +proj=longlat +datum=NAD27 +no_defs
LDID: 87
Number of fields: 14
name type length typeName
1 AREA 2 24 Real
2 PERIMETER 2 24 Real
3 CNTY_ 2 24 Real
4 CNTY_ID 2 24 Real
5 NAME 4 80 String
6 FIPS 4 80 String
7 FIPSNO 2 24 Real
8 CRESS_ID 0 9 Integer
9 BIR74 2 24 Real
10 SID74 2 24 Real
11 NWBIR74 2 24 Real
12 BIR79 2 24 Real
13 SID79 2 24 Real
14 NWBIR79 2 24 Real
您可以使用 read_sf 传递 SQL 查询。它应该是这样的
library(sf)
data = read_sf('file.gpkg', query = 'SELECT * from layername LIMIT 1')