我有一个包含不同点位置的经纬度信息的数据集,我想知道哪个城市和州与每个点相关联。
在此example之后,我使用ggmap
的revgeocode
函数获得每个位置的街道地址,生成以下 Dataframe :
df <- structure(list(PointID = c(1787L, 2805L, 3025L, 3027L, 3028L,
3029L, 3030L, 3031L, 3033L), Latitude = c(38.36648102, 36.19548585,
43.419774, 43.437222, 43.454722, 43.452643, 43.411949, 43.255479,
43.261464), Longitude = c(-76.4802046, -94.21554661, -87.960399,
-88.018333, -87.974722, -87.978542, -87.94149, -87.986433, -87.968612
), Address = structure(c(2L, 8L, 5L, 3L, 9L, 7L, 4L, 1L, 6L), .Label = c("13004 N Thomas Dr, Mequon, WI 53097, USA",
"2160 Turner Rd, Lusby, MD 20657, USA", "2805 County Rd Y, Saukville, WI 53080, USA",
"3701-3739 County Hwy W, Saukville, WI 53080, USA", "3907 Echo Ln, Saukville, WI 53080, USA",
"4823 W Bonniwell Rd, Mequon, WI 53097, USA", "5100-5260 County Rd I, Saukville, WI 53080, USA",
"7948 W Gibbs Rd, Springdale, AR 72762, USA", "River Park Rd, Saukville, WI 53080, USA"
), class = "factor")), row.names = c(NA, -9L), class = "data.frame", .Names = c("PointID",
"Latitude", "Longitude", "Address"))
我想使用R从完整的街道地址中提取城市/州信息,并创建两列来存储此信息(“City”和“State”)。
我假设stringr
包是正确的,但我不确定如何使用它。上面的example使用以下代码提取邮政编码(在该示例中名为“result”)。他们的数据集:
# ID Longitude Latitude result
# 1 311175 41.29844 -72.92918 16 Church Street South, New Haven, CT 06519, USA
# 2 292058 41.93694 -87.66984 1632 West Nelson Street, Chicago, IL 60657, USA
# 3 12979 37.58096 -77.47144 2077-2199 Seddon Way, Richmond, VA 23230, USA
和提取邮政编码的代码:
library(stringr)
data$zipcode <- substr(str_extract(data$result," [0-9]{5}, .+"),2,6)
data[,-4]
是否可以轻松地修改上述代码以获取城市和州的数据?
3条答案
按热度按时间hivapdat1#
您可以使用
revgeocode()
本身获取城市和州:***P.S.***您可以一步完成所有操作(包括获取地址或/和邮政编码)。只需将
"address"
或/和"postal_code"
添加到c("administrative_area_level_1","locality")
,这是您想要提取的变量列表。6tr1vspr2#
如果你想使用stringr,你可以这样做:
wydwbb8l3#
1)sub像这样使用
sub
。不需要包。正则表达式匹配开始(^)后跟最短字符串,直到逗号和空格后跟最短字符串(代表城市),直到另一个逗号和空格后跟两个字符(表示状态),一个空格,5个字符(表示邮政编码)、逗号、空格、USA和字符串结尾。与带括号部分的匹配可以通过\1、\2和\3但在双引号内\必须加倍。
如果您的邮政编码不全是5位数,请尝试
pat <- "^.*?, (.*?), (..) (.*), USA$"
。给出:
2)read.pattern另一种可能性是
read.pattern
,与上面的pat
相同: