The late comedian Mitch Hedberg famously joked that “La Quinta” is Spanish for “next to Denny’s”. In this lab exercise, we explore the accuracy of his claim that Denny’s, a casual diner chain that is open 24 hours, is actually co-located with La Quinta Inn and Suites, a hotel chain. This lab is inspired by a blog post by John Reiser entitled Mitch Hedberg and GIS.

Loading the Dataset

We use three datasets, all stored in ./data:

Note that the first two datasets are represented in RDS format, which is an R-internal format for datasets that maintains data types. The last dataset is in CSV format and requires some

dennys <- read_rds("data/dennys.rds")
laquinta <- read_rds("data/laquinta.rds")
states <- read_csv("data/states.csv", col_types = cols(
  name = col_character(),
  abbreviation = col_character(),
  area = col_double()
))

🚧 The dataset descriptions on the RStudio-Education site are rather uninformative. So describe them here, including a data dictionary and their size.

Focusing on US Locations

We limit our analysis to Denny”s and La Quinta locations in the United States.

🚧 Are there any Denny’s or La Quinta locations that are outside the US? Answer this by filtering for observations where state is not in states$abbreviation. Here, the %in% operator matches the states listed in the state variable to those listed in the states$abbreviation vector. The ! operator means not:

dennys %>%
  filter(!(state %in% states$abbreviation))
# A tibble: 0 × 6
# … with 6 variables: address <chr>, city <chr>, state <chr>, zip <chr>,
#   longitude <dbl>, latitude <dbl>

🚧 Going forward we will work with the data from the United States only, so you can define two new dataframes, dennys_us and laquinta_us, that include only US locations. Include an indication of how many Denny’s and La Quinta records are filtered out because they are not in the US.

Computing Frequencies

In the following sections, we compute some density statistics for the two franchises.

By State

🚧 Compute which states have the most and fewest Denny’s locations. Do the same for La Quinta. Describe the results and discuss whether there’s anything interesting about them.

By Area

🚧 Compute which states have the most Denny’s locations per thousand square miles. Do the same for La Quinta. Describe the results and discuss whether there’s anything interesting about them. Note: to do this, you’ll need to look up the area of the states in the states dataset. Start with the table of counts by state that you just computed above and then join it with the table that has the area of each state. The states’ areas are given in square miles; make a new column for the result of the unit conversion.

Plotting Locations

Finally, we plot the locations (latitude and longitude) of both establishments.

To do this, we’ll put the two datasets together into a single data frame. First, we’ll add an identifier variable called establishment to distinguish rows from the two datasets, and then we’ll bind them with the bind_rows function (n.b., this binding works because the two tables have the same columns):

dn_lq <- bind_rows(
  dennys_us %>% mutate(establishment = "Denny's"), 
  laquinta_us %>% mutate(establishment = "La Quinta"), 
)

🚧 Plot the locations of the two establishments using a scatter plot, and color the points by the establishment type. Note: the longitude is plotted on the x-axis and the latitude on the y-axis.

Drawing Conclusions

🚧 In conclusion, do Denny’s restaurants and La Quinta motels appear, visually, to be co-located?

Note: the homework for this week concludes this analysis.

LS0tCnRpdGxlOiAiTGFiIDYuMSAtIFZpc3VhbGl6aW5nIFNwYXRpYWwgRGF0YSIKYXV0aG9yOiAiQXV0aG9yIEdvZXMgSGVyZSIKZGF0ZTogIlNlbWVzdGVyIEdvZXMgSGVyZSIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlCi0tLQoKYGBge3Igc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0KIyBTZXQgc29tZSB1c2VmdWwgY2h1bmsgb3B0aW9ucyBmb3IgY29kZSBjaHVua3MuCmtuaXRyOjpvcHRzX2NodW5rJHNldCgKICBlY2hvID0gVFJVRSwKICBlcnJvciA9IFRSVUUsICAgICMgZGlzcGxheSBlcnJvcnMgYnV0IGtlZXAgZ29pbmcuCiAgY29tbWVudCA9ICIiLCAgICAjIGRvbid0IGFkZCAnIyMnIGNoYXJhY3RlcnMgYmVmb3JlIG91dHB1dC4KICBtZXNzYWdlID0gRkFMU0UgICMgZG9uJ3QgaW5jbHVkZSBtZXNzYWdlcyBpbiB0aGUga25pdHRlZCBvdXRwdXQgKGNoZWNrIHRoZW0gaW4gUlN0dWRpbykKICApCmxpYnJhcnkodGlkeXZlcnNlKQp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpUaGUgbGF0ZSBjb21lZGlhbiBbTWl0Y2ggSGVkYmVyZ10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTWl0Y2hfSGVkYmVyZykgZmFtb3VzbHkgam9rZWQgdGhhdCAiTGEgUXVpbnRhIiBpcyBTcGFuaXNoIGZvciAibmV4dCB0byBEZW5ueSdzIi4gSW4gdGhpcyBsYWIgZXhlcmNpc2UsIHdlIGV4cGxvcmUgdGhlIGFjY3VyYWN5IG9mIGhpcyBjbGFpbSB0aGF0IFtEZW5ueSdzXShodHRwczovL3d3dy5kZW5ueXMuY29tLyksIGEgY2FzdWFsIGRpbmVyIGNoYWluIHRoYXQgaXMgb3BlbiAyNCBob3VycywgaXMgYWN0dWFsbHkgY28tbG9jYXRlZCB3aXRoIFtMYSBRdWludGEgSW5uIGFuZCBTdWl0ZXNdKGh0dHA6Ly93d3cubHEuY29tLyksIGEgaG90ZWwgY2hhaW4uIFRoaXMgbGFiIGlzIGluc3BpcmVkIGJ5IGEgYmxvZyBwb3N0IGJ5IEpvaG4gUmVpc2VyIGVudGl0bGVkIFtNaXRjaCBIZWRiZXJnIGFuZCBHSVNdKGh0dHA6Ly9uamdlby5vcmcvMjAxNC8wMS8zMC9taXRjaC1oZWRiZXJnLWFuZC1naXMvKS4KCiMjIExvYWRpbmcgdGhlIERhdGFzZXQKCldlIHVzZSB0aHJlZSBkYXRhc2V0cywgYWxsIHN0b3JlZCBpbiBbLi9kYXRhXShodHRwczovL2NzLmNhbHZpbi5lZHUvY291cnNlcy9pbmZvLzYwMS8wNndyYW5nbGluZy9sYWIvZGF0YS8uKToKCi0gYGRlbm55c2AgLS0tIFRoZSBsb2NhdGlvbnMgb2YgYWxsIERlbm55J3MgcmVzdGF1cmFudHM6CiAgLSAqU2NyYXBlZCogZnJvbSBbQWxsIERlbm55J3MgTG9jYXRpb25zXShodHRwczovL2xvY2F0aW9ucy5kZW5ueXMuY29tLykKICAtIERlc2NyaWJlZCBoZXJlOiBbTG9jYXRpb25zIG9mIERlbm55J3MgcmVzdGF1cmFudHNdKGh0dHBzOi8vcnN0dWRpby1lZHVjYXRpb24uZ2l0aHViLmlvL2RzYm94L3JlZmVyZW5jZS9kZW5ueXMuaHRtbCkKICAKLSBgbGFxdWludGFgIC0tLSBUaGUgbG9jYXRpb25zIG9mIGFsbCBMYSBRdWludGEgaG90ZWxzOiAKICAtICpTY3JhcGVkKiBmcm9tIFtMYSBRdWludGEgTG9jYXRpb25zXShodHRwczovL3d3dy53eW5kaGFtaG90ZWxzLmNvbS9sYXF1aW50YS9sb2NhdGlvbnMpCiAgLSBEZXNjcmliZWQgaGVyZTogW0xvY2F0aW9ucyBvZiBMYSBRdWludGEgSW5uIG1vdGVsc10oaHR0cHM6Ly9yc3R1ZGlvLWVkdWNhdGlvbi5naXRodWIuaW8vZHNib3gvcmVmZXJlbmNlL2xhcXVpbnRhLmh0bWwpCgotIGBzdGF0ZXNgIC0tLSBUaGUgbmFtZXMgb2YgYWxsIHRoZSBVUyBzdGF0ZXMsIGluY2x1ZGluZyBEQywgcGx1cyBzb21lIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCgpOb3RlIHRoYXQgdGhlIGZpcnN0IHR3byBkYXRhc2V0cyBhcmUgcmVwcmVzZW50ZWQgaW4gUkRTIGZvcm1hdCwgd2hpY2ggaXMgYW4gUi1pbnRlcm5hbCBmb3JtYXQgZm9yIGRhdGFzZXRzIHRoYXQgbWFpbnRhaW5zIGRhdGEgdHlwZXMuIFRoZSBsYXN0IGRhdGFzZXQgaXMgaW4gQ1NWIGZvcm1hdCBhbmQgcmVxdWlyZXMgc29tZSAKCmBgYHtyIGxvYWQtZGF0YSwgbWVzc2FnZT1GQUxTRX0KZGVubnlzIDwtIHJlYWRfcmRzKCJkYXRhL2Rlbm55cy5yZHMiKQpsYXF1aW50YSA8LSByZWFkX3JkcygiZGF0YS9sYXF1aW50YS5yZHMiKQpzdGF0ZXMgPC0gcmVhZF9jc3YoImRhdGEvc3RhdGVzLmNzdiIsIGNvbF90eXBlcyA9IGNvbHMoCiAgbmFtZSA9IGNvbF9jaGFyYWN0ZXIoKSwKICBhYmJyZXZpYXRpb24gPSBjb2xfY2hhcmFjdGVyKCksCiAgYXJlYSA9IGNvbF9kb3VibGUoKQopKQpgYGAKCvCfmqcKVGhlIGRhdGFzZXQgZGVzY3JpcHRpb25zIG9uIHRoZSBSU3R1ZGlvLUVkdWNhdGlvbiBzaXRlIGFyZSByYXRoZXIgdW5pbmZvcm1hdGl2ZS4gU28gZGVzY3JpYmUgdGhlbSBoZXJlLCBpbmNsdWRpbmcgYSBkYXRhIGRpY3Rpb25hcnkgYW5kIHRoZWlyIHNpemUuCgojIyBGb2N1c2luZyBvbiBVUyBMb2NhdGlvbnMKCldlIGxpbWl0IG91ciBhbmFseXNpcyB0byBEZW5ueSJzIGFuZCBMYSBRdWludGEgbG9jYXRpb25zIGluIHRoZSBVbml0ZWQgU3RhdGVzLgoK8J+apwpBcmUgdGhlcmUgYW55IERlbm55J3Mgb3IgTGEgUXVpbnRhIGxvY2F0aW9ucyB0aGF0IGFyZSBvdXRzaWRlIHRoZSBVUz8gQW5zd2VyIHRoaXMgYnkgZmlsdGVyaW5nIGZvciBvYnNlcnZhdGlvbnMgd2hlcmUgYHN0YXRlYCBpcyBub3QgaW4gYHN0YXRlcyRhYmJyZXZpYXRpb25gLiBIZXJlLCB0aGUgYCVpbiVgIG9wZXJhdG9yIG1hdGNoZXMgdGhlIHN0YXRlcyBsaXN0ZWQgaW4gdGhlIGBzdGF0ZWAgdmFyaWFibGUgdG8gdGhvc2UgbGlzdGVkIGluIHRoZSBgc3RhdGVzJGFiYnJldmlhdGlvbmAgdmVjdG9yLiBUaGUgYCFgIG9wZXJhdG9yIG1lYW5zICoqbm90Kio6CgpgYGB7cn0KZGVubnlzICU+JQogIGZpbHRlcighKHN0YXRlICVpbiUgc3RhdGVzJGFiYnJldmlhdGlvbikpCmBgYAoKW09QVElPTkFMXTogVHJ5IHVzaW5nIGFuIGBhbnRpX2pvaW5gIGluc3RlYWQuCgrwn5qnCkdvaW5nIGZvcndhcmQgd2Ugd2lsbCB3b3JrIHdpdGggdGhlIGRhdGEgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvbmx5LCBzbyB5b3UgY2FuIGRlZmluZSB0d28gbmV3IGRhdGFmcmFtZXMsIGBkZW5ueXNfdXNgIGFuZCBgbGFxdWludGFfdXNgLCB0aGF0IGluY2x1ZGUgb25seSBVUyBsb2NhdGlvbnMuIEluY2x1ZGUgYW4gaW5kaWNhdGlvbiBvZiBob3cgbWFueSBEZW5ueSdzIGFuZCBMYSBRdWludGEgcmVjb3JkcyBhcmUgZmlsdGVyZWQgb3V0IGJlY2F1c2UgdGhleSBhcmUgbm90IGluIHRoZSBVUy4KCiMjIENvbXB1dGluZyBGcmVxdWVuY2llcwoKSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgd2UgY29tcHV0ZSBzb21lIGRlbnNpdHkgc3RhdGlzdGljcyBmb3IgdGhlIHR3byBmcmFuY2hpc2VzLgoKIyMjIEJ5IFN0YXRlCgrwn5qnCkNvbXB1dGUgd2hpY2ggc3RhdGVzIGhhdmUgdGhlIG1vc3QgYW5kIGZld2VzdCBEZW5ueSdzIGxvY2F0aW9ucy4gRG8gdGhlIHNhbWUgZm9yIExhIFF1aW50YS4gRGVzY3JpYmUgdGhlIHJlc3VsdHMgYW5kIGRpc2N1c3Mgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIGludGVyZXN0aW5nIGFib3V0IHRoZW0uCgojIyMgQnkgQXJlYQoK8J+apwpDb21wdXRlIHdoaWNoIHN0YXRlcyBoYXZlIHRoZSBtb3N0IERlbm55J3MgbG9jYXRpb25zICpwZXIgdGhvdXNhbmQgc3F1YXJlIG1pbGVzKi4gRG8gdGhlIHNhbWUgZm9yIExhIFF1aW50YS4gRGVzY3JpYmUgdGhlIHJlc3VsdHMgYW5kIGRpc2N1c3Mgd2hldGhlciB0aGVyZSdzIGFueXRoaW5nIGludGVyZXN0aW5nIGFib3V0IHRoZW0uICpOb3RlKjogdG8gZG8gdGhpcywgeW91J2xsIG5lZWQgdG8gKmxvb2sgdXAqIHRoZSBhcmVhIG9mIHRoZSBzdGF0ZXMgaW4gdGhlIGBzdGF0ZXNgIGRhdGFzZXQuIFN0YXJ0IHdpdGggdGhlIHRhYmxlIG9mIGNvdW50cyBieSBzdGF0ZSB0aGF0IHlvdSBqdXN0IGNvbXB1dGVkIGFib3ZlIGFuZCB0aGVuICpqb2luKiBpdCB3aXRoIHRoZSB0YWJsZSB0aGF0IGhhcyB0aGUgYXJlYSBvZiBlYWNoIHN0YXRlLiBUaGUgc3RhdGVzJyBhcmVhcyBhcmUgZ2l2ZW4gaW4gc3F1YXJlIG1pbGVzOyBtYWtlIGEgbmV3IGNvbHVtbiBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgdW5pdCBjb252ZXJzaW9uLgoKIyMgUGxvdHRpbmcgTG9jYXRpb25zCgpGaW5hbGx5LCB3ZSBwbG90IHRoZSBsb2NhdGlvbnMgKGxhdGl0dWRlIGFuZCBsb25naXR1ZGUpIG9mIGJvdGggZXN0YWJsaXNobWVudHMuCgpUbyBkbyB0aGlzLCB3ZSdsbCBwdXQgdGhlIHR3byBkYXRhc2V0cyB0b2dldGhlciBpbnRvIGEgc2luZ2xlIGRhdGEgZnJhbWUuCkZpcnN0LCB3ZSdsbCBhZGQgYW4gaWRlbnRpZmllciB2YXJpYWJsZSBjYWxsZWQgYGVzdGFibGlzaG1lbnRgIHRvIGRpc3Rpbmd1aXNoIHJvd3MgZnJvbSB0aGUgdHdvIGRhdGFzZXRzLCBhbmQgdGhlbiB3ZSdsbCBiaW5kIHRoZW0gd2l0aCB0aGUgYGJpbmRfcm93c2AgZnVuY3Rpb24gKG4uYi4sIHRoaXMgYmluZGluZyB3b3JrcyBiZWNhdXNlIHRoZSB0d28gdGFibGVzIGhhdmUgdGhlIHNhbWUgY29sdW1ucyk6CgpgYGAKZG5fbHEgPC0gYmluZF9yb3dzKAogIGRlbm55c191cyAlPiUgbXV0YXRlKGVzdGFibGlzaG1lbnQgPSAiRGVubnkncyIpLCAKICBsYXF1aW50YV91cyAlPiUgbXV0YXRlKGVzdGFibGlzaG1lbnQgPSAiTGEgUXVpbnRhIiksIAopCmBgYAoK8J+apwpQbG90IHRoZSBsb2NhdGlvbnMgb2YgdGhlIHR3byBlc3RhYmxpc2htZW50cyB1c2luZyBhIHNjYXR0ZXIgcGxvdCwgYW5kIGNvbG9yIHRoZSBwb2ludHMgYnkgdGhlIGVzdGFibGlzaG1lbnQgdHlwZS4gKk5vdGUqOiB0aGUgbG9uZ2l0dWRlIGlzIHBsb3R0ZWQgb24gdGhlIHgtYXhpcyBhbmQgdGhlIGxhdGl0dWRlIG9uIHRoZSB5LWF4aXMuCgojIyBEcmF3aW5nIENvbmNsdXNpb25zCgrwn5qnCkluIGNvbmNsdXNpb24sIGRvIERlbm55J3MgcmVzdGF1cmFudHMgYW5kIExhIFF1aW50YSBtb3RlbHMgYXBwZWFyLCB2aXN1YWxseSwgdG8gYmUgY28tbG9jYXRlZD8KCk5vdGU6IHRoZSBob21ld29yayBmb3IgdGhpcyB3ZWVrIGNvbmNsdWRlcyB0aGlzIGFuYWx5c2lzLgo=