Bind rows (features) of sf objects
Bind columns (variables) of sf objects
Value
cbind called with multiple sf objects warns about multiple geometry columns present when the geometry column to use is not specified by using argument sf_column_name; see also st_sf.
Details
both rbind and cbind have non-standard method dispatch (see cbind): the rbind or cbind method for sf objects is only called when all arguments to be binded are of class sf.
If you need to cbind e.g. a data.frame to an sf, use data.frame directly and use st_sf on its result, or use bind_cols; see examples.
st_bind_cols is deprecated; use cbind instead.
Examples
crs = st_crs(3857)
a = st_sf(a=1, geom = st_sfc(st_point(0:1)), crs = crs)
b = st_sf(a=1, geom = st_sfc(st_linestring(matrix(1:4,2))), crs = crs)
c = st_sf(a=4, geom = st_sfc(st_multilinestring(list(matrix(1:4,2)))), crs = crs)
rbind(a,b,c)
#> Simple feature collection with 3 features and 1 field
#> Geometry type: GEOMETRY
#> Dimension: XY
#> Bounding box: xmin: 0 ymin: 1 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a geom
#> 1 1 POINT (0 1)
#> 2 1 LINESTRING (1 3, 2 4)
#> 3 4 MULTILINESTRING ((1 3, 2 4))
rbind(a,b)
#> Simple feature collection with 2 features and 1 field
#> Geometry type: GEOMETRY
#> Dimension: XY
#> Bounding box: xmin: 0 ymin: 1 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a geom
#> 1 1 POINT (0 1)
#> 2 1 LINESTRING (1 3, 2 4)
rbind(a,b)
#> Simple feature collection with 2 features and 1 field
#> Geometry type: GEOMETRY
#> Dimension: XY
#> Bounding box: xmin: 0 ymin: 1 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a geom
#> 1 1 POINT (0 1)
#> 2 1 LINESTRING (1 3, 2 4)
rbind(b,c)
#> Simple feature collection with 2 features and 1 field
#> Geometry type: GEOMETRY
#> Dimension: XY
#> Bounding box: xmin: 1 ymin: 3 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a geom
#> 1 1 LINESTRING (1 3, 2 4)
#> 2 4 MULTILINESTRING ((1 3, 2 4))
cbind(a,b,c) # warns
#> Simple feature collection with 1 feature and 3 fields
#> Active geometry column: geom
#> Geometry type: POINT
#> Dimension: XY
#> Bounding box: xmin: 0 ymin: 1 xmax: 0 ymax: 1
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a a.1 a.2 geom geom.1 geom.2
#> 1 1 1 4 POINT (0 1) LINESTRING (1 3, 2 4) MULTILINESTRING ((1 3, 2 4))
if (require(dplyr, quietly = TRUE))
dplyr::bind_cols(a,b)
#>
#> Attaching package: ‘dplyr’
#> The following objects are masked from ‘package:stats’:
#>
#> filter, lag
#> The following objects are masked from ‘package:base’:
#>
#> intersect, setdiff, setequal, union
#> New names:
#> • `a` -> `a...1`
#> • `geom` -> `geom...2`
#> • `a` -> `a...3`
#> • `geom` -> `geom...4`
#> a...1 geom...2 a...3 geom...4
#> 1 1 POINT (0 1) 1 LINESTRING (1 3, 2 4)
c = st_sf(a=4, geomc = st_sfc(st_multilinestring(list(matrix(1:4,2)))), crs = crs)
cbind(a,b,c, sf_column_name = "geomc")
#> Simple feature collection with 1 feature and 3 fields
#> Active geometry column: geomc
#> Geometry type: MULTILINESTRING
#> Dimension: XY
#> Bounding box: xmin: 1 ymin: 3 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a a.1 a.2 geom geom.1 geomc
#> 1 1 1 4 POINT (0 1) LINESTRING (1 3, 2 4) MULTILINESTRING ((1 3, 2 4))
df = data.frame(x=3)
st_sf(data.frame(c, df))
#> Simple feature collection with 1 feature and 2 fields
#> Geometry type: MULTILINESTRING
#> Dimension: XY
#> Bounding box: xmin: 1 ymin: 3 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a x geomc
#> 1 4 3 MULTILINESTRING ((1 3, 2 4))
if (require(dplyr, quietly = TRUE))
dplyr::bind_cols(c, df)
#> Simple feature collection with 1 feature and 2 fields
#> Geometry type: MULTILINESTRING
#> Dimension: XY
#> Bounding box: xmin: 1 ymin: 3 xmax: 2 ymax: 4
#> Projected CRS: WGS 84 / Pseudo-Mercator
#> a x geomc
#> 1 4 3 MULTILINESTRING ((1 3, 2 4))
