While add_features()
and update_features()
had a very similar syntax, delete_features()
has a somewhat different interface. We have 3 different ways in which we can delete features. Here we will explore only two of them.
library(arcgis) set_arc_token(auth_code()) nc_url <- "https://services1.arcgis.com/hLJbHVT9ZrDIzK0I/arcgis/rest/services/North%20Carolina%20SIDS/FeatureServer/0" nc <- arc_open(nc_url)
We can delete features based on object IDs or a SQL where clause. Let’s explore deleting features based on object IDs. To do so, we need to pass the FeatureLayer
obejct as the first argument to delete_features()
. The second argument is a numeric vector of the IDs we want to delete. The ID 101
is the new feature that we created.
delete_res <- delete_features(nc, object_ids = 101) delete_res
$deleteResults
objectId uniqueId globalId success
1 101 101 NA TRUE
We can check to see if the delete worked by refreshing the layer and seeing the count that is printed out.
refresh_layer(nc)
<FeatureLayer>
Name: North Carolina SIDS
Geometry Type: esriGeometryPolygon
CRS: 4267
Capabilities: Create,Delete,Query,Update,Editing
Alternatively, we can delete features based on a where
clause. Say we wanted to delete all of the features where the BIR74
value was less than 1000
. We can accomplish this using a where clause.
delete_res <- delete_features(nc, where = "BIR74 < 1000") delete_res
$deleteResults
objectId uniqueId globalId success
1 2 2 NA TRUE
2 4 4 NA TRUE
3 7 7 NA TRUE
4 8 8 NA TRUE
5 9 9 NA TRUE
6 20 20 NA TRUE
7 21 21 NA TRUE
8 22 22 NA TRUE
9 32 32 NA TRUE
10 35 35 NA TRUE
11 38 38 NA TRUE
12 44 44 NA TRUE
13 45 45 NA TRUE
14 56 56 NA TRUE
15 58 58 NA TRUE
16 59 59 NA TRUE
17 73 73 NA TRUE
18 77 77 NA TRUE
19 78 78 NA TRUE
20 80 80 NA TRUE
21 83 83 NA TRUE
22 87 87 NA TRUE
23 90 90 NA TRUE
Successful deletes! Again, we can check to see the new count using refresh_layer()
.
refresh_layer(nc)
<FeatureLayer>
Name: North Carolina SIDS
Geometry Type: esriGeometryPolygon
CRS: 4267
Capabilities: Create,Delete,Query,Update,Editing
Lastly, if you want to delete every single feature. We can take advantage of the where clause again. If we set where = "1 = 1"
that will evaluate TRUE
for every single feature.
delete_res <- delete_features(nc, where = "1 = 1") delete_res
$deleteResults
objectId uniqueId globalId success
1 1 1 NA TRUE
2 3 3 NA TRUE
3 5 5 NA TRUE
4 6 6 NA TRUE
5 10 10 NA TRUE
6 11 11 NA TRUE
... Truncated ...
refresh_layer(nc)
<FeatureLayer>
Name: North Carolina SIDS
Geometry Type: esriGeometryPolygon
CRS: 4267
Capabilities: Create,Delete,Query,Update,Editing
Note that you shuold use truncate_layer()
instead of delete_features(x, where = "1 = 1")
.