## construction with an sfc object
library(sf)
g <- st_sfc(st_point(1:2))
tc <- Sys.time()
st_sftime(a = 3, g, time = tc)
## construction with an sf object
if (FALSE) {
st_sftime(st_sf(a = 3, g), time = tc)
# error, because if ... contains a data.frame-like object, no other objects
# may be passed through ... . Instead, add the time column before.
}
st_sftime(st_sf(a = 3, g, time = tc))
## Subsetting
g <- st_sfc(st_point(c(1, 2)), st_point(c(1, 3)), st_point(c(2, 3)),
st_point(c(2, 1)), st_point(c(3, 1)))
tc <- Sys.time() + 1:5
x <- st_sftime(a = 1:5, g, time = tc)
# rows
x[1, ]
class(x[1, ])
x[x$a < 3, ]
class(x[x$a < 3, ])
# columns
x[, 1]
class(x[, 1]) # drops time column as for ordinary data.frame subsetting,
# keeps geometry column of sf object
x[, 3]
class(x[, 3]) # keeps time column because it is explicitly selected,
# keeps geometry column of sf object, returns an sftime object
x[, 3, drop = TRUE]
class(x[, 3, drop = TRUE]) # if the geometry column is dropped, not only the
# sf class is dropped, but also the sftime class
x["a"]
class(x["a"]) # Time columns are not sticky: If a column is selected by a
# character vector and this does not contain the active time column, the time
# column is dropped.
x[c("a", "time")]
class(x[c("a", "time")]) # keeps the time column
# with sf or sftime object
pol = st_sfc(st_polygon(list(cbind(c(0,2,2,0,0),c(0,0,2,2,0)))))
h = st_sf(r = 5, pol)
x[h, ]
class(x[h, ]) # returns sftime object
h[x, ]
class(h[x, ]) # returns sf object
## Assigning values to columns
# assigning new values to a non-time column
x[["a"]] <- 5:1
class(x)
# assigning allowed new values to the time column
x[["time"]] <- Sys.time() + 1:5
class(x)
# assigning new values to the time column which invalidate the time column
x[["time"]] <- list(letters[1:2])
class(x)
# assigning new values with `$`
x$time <- Sys.time() + 1:5
class(x)
Run the code above in your browser using DataLab