У меня есть набор данных с координатами долготы и широты. Я хочу получить соответствующий переписной лист. Есть ли набор данных или API, которые позволили бы мне это сделать?
Мой набор данных выглядит так:
lat lon
1 40.61847 -74.02123
2 40.71348 -73.96551
3 40.69948 -73.96104
4 40.70377 -73.93116
5 40.67859 -73.99049
6 40.71234 -73.92416
Хочу добавить столбец с соответствующим переписным листом.
Окончательный результат должен выглядеть примерно так (это не те числа, а просто пример).
lat lon Census_Tract_Label
1 40.61847 -74.02123 5.01
2 40.71348 -73.96551 20
3 40.69948 -73.96104 41
4 40.70377 -73.93116 52.02
5 40.67859 -73.99049 58
6 40.71234 -73.92416 60





Пакет tigris включает функцию call_geolocator_latlon, которая должна делать то, что вы ищете. Вот код, использующий
> coord <- data.frame(lat = c(40.61847, 40.71348, 40.69948, 40.70377, 40.67859, 40.71234),
+ long = c(-74.02123, -73.96551, -73.96104, -73.93116, -73.99049, -73.92416))
>
> coord$census_code <- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long']))
> coord
lat long census_code
1 40.61847 -74.02123 360470152003001
2 40.71348 -73.96551 360470551001009
3 40.69948 -73.96104 360470537002011
4 40.70377 -73.93116 360470425003000
5 40.67859 -73.99049 360470077001000
6 40.71234 -73.92416 360470449004075
Насколько я понимаю, 15-значный код - это несколько кодов, соединенных вместе (первые два - это штат, следующие три - округ, а следующие шесть - тракт). Чтобы получить только код переписного участка, я бы просто использовал функцию substr, чтобы вытащить эти шесть цифр.
> coord$census_tract <- substr(coord$census_code, 6, 1)
> coord
lat long census_code census_tract
1 40.61847 -74.02123 360470152003001 015200
2 40.71348 -73.96551 360470551001009 055100
3 40.69948 -73.96104 360470537002011 053700
4 40.70377 -73.93116 360470425003000 042500
5 40.67859 -73.99049 360470077001000 007700
6 40.71234 -73.92416 360470449004075 044900
Надеюсь, это поможет!
Эта конкретная функция выглядит так, как будто она выполняет только отдельные вызовы API за раз. В Документация по API из переписи упоминается пакетное геокодирование путем отправки специально отформатированного CSV. пример команды curl, которую они дают: curl --form [email protected] --form benchmark=9 https://geocoding.geo.census.gov/geocoder/locations/addressbatch --output geocoderesult.csv
Это очень полезно! Если бы я хотел указать конкретный винтаж, какую модификацию мне нужно было бы внести? Я пробовал coord$census_code <- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long'], vintage = 2010)) и coord$census_code <- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long'], rep(na, nrow(coord)), rep(2010, nrow(coord))), а также добавлял столбцы benchmark и vintage, а затем делал coord$census_code <- apply(coord, 1, function(row) call_geolocator_latlon(row['lat'], row['long'], row['benchmark'], row['vintage']).
Есть ли способ векторизовать
call_geolocator_latlon? Я бы хотел это сделать, но для относительно большого количества (200 000) координат.