Converts an sf object to a data.frame
sf_to_df(sf, fill = FALSE, unlist = NULL)
sf object
logical indicating if the resulting data.frame should be filled
with the data columns from the sf object. If TRUE
, each row of data will
be replicated for every coordinate in every geometry.
string vector of columns to unlist. Each list element is equivalent to a row of the input object, and is expected to be the same length as the number of coordinates in the geometry.
df <- data.frame(
ml_id = c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2)
, l_id = c(1,1,1,2,2,2,3,3,3,1,1,1,2,2,2)
, x = rnorm(15)
, y = rnorm(15)
, z = rnorm(15)
, m = rnorm(15)
)
sf <- sf_polygon( obj = df, polygon_id = "ml_id", linestring_id = "l_id" )
df <- sf_to_df( sf )
## with associated data
sf$val1 <- c("a","b")
sf$val2 <- c(1L, 2L)
df <- sf_to_df( sf, fill = TRUE )
## Unlisting list columns
df <- data.frame(
l_id = c(1,1,1,2,2,2,3,3,3,3)
, x = rnorm(10)
, y = rnorm(10)
)
sf <- sf_linestring( obj = df, linestring_id = "l_id" , x = "x", y = "y")
## put on a list column
sf$l <- list( c(1,2,3),c(3,2,1),c(10,11,12,13))
sf_to_df( sf, unlist = "l" )
#> sfg_id linestring_id x y l
#> 1 1 1 -1.14229077 1.4486572 1
#> 2 1 1 1.70460874 1.5181931 2
#> 3 1 1 -0.08007363 -0.3840073 3
#> 4 2 2 -0.43728124 1.8271252 3
#> 5 2 2 -0.11921509 -0.5514917 2
#> 6 2 2 0.78646286 -0.8657535 1
#> 7 3 3 -0.57894525 -0.3438315 10
#> 8 3 3 -0.14542689 1.0628765 11
#> 9 3 3 0.52645799 0.8130582 12
#> 10 3 3 1.73357811 1.8034834 13