R:不可能完成任务吗?如何将“纽约”分配给一个县

克里斯托弗

我遇到了将县分配给某些城市地方的问题。通过acs查询时

> geo.lookup(state = "NY", place = "New York")
  state state.name                                                                 county.name place             place.name
1    36   New York                                                                        <NA>    NA                   <NA>
2    36   New York Bronx County, Kings County, New York County, Queens County, Richmond County 51000          New York city
3    36   New York                                                               Oneida County 51011 New York Mills village

,例如,您可以看到“纽约”有很多县。洛杉矶,波特兰,俄克拉荷马州,哥伦布等也是如此如何将这些数据分配给“县”?

当前使用以下代码将“ county.name”与相应的县FIPS代码进行匹配。不幸的是,它仅适用于查询中仅输出一个县名的情况。

脚本

dat <- c("New York, NY","Boston, MA","Los Angeles, CA","Dallas, TX","Palo Alto, CA")
dat <- strsplit(dat, ",")
dat

library(tigris)
library(acs)
data(fips_codes) # FIPS codes with state, code, county information

GeoLookup <- lapply(dat,function(x) {
  geo.lookup(state = trimws(x[2]), place = trimws(x[1]))[2,]
})

df <- bind_rows(GeoLookup)

#Rename cols to match
colnames(fips_codes) = c("state.abb", "statefips", "state.name", "countyfips", "county.name")

# Here is a problem, because it works with one item in "county.name" but not more than one (see output below).

df <- df %>% left_join(fips_codes, by = c("state.name", "county.name"))
df

返回值:

  state    state.name                                                                  county.name place           place.name state.abb statefips countyfips
1    36      New York  Bronx County, Kings County, New York County, Queens County, Richmond County 51000        New York city      <NA>      <NA>       <NA>
2    25 Massachusetts                                                               Suffolk County  7000          Boston city        MA        25        025
3     6    California                                                           Los Angeles County 20802 East Los Angeles CDP        CA        06        037
4    48         Texas Collin County, Dallas County, Denton County, Kaufman County, Rockwall County 19000          Dallas city      <NA>      <NA>       <NA>
5     6    California                                                             San Mateo County 20956  East Palo Alto city        CA        06        081

为了保留数据,最好将left_join匹配为“查找county.name包含的内容place.name(名称中不包含xy城市),或者默认情况下选择第一项。很高兴看到如何做到这一点。

总的来说:我认为,没有比这种方法更好的方法了吗?

谢谢你的帮助!

eipi10

像下面的代码那样创建一个“长”数据帧以进行连接的东西呢?我们使用tidyverse管道运算符来链接操作。strsplit返回一个列表,我们unnest堆栈列表中的值(即用每一个组合去县城的名字state.nameplace.name)为长数据帧,其中每个county.name现在都有自己的行。

library(tigris)
library(acs)  
library(tidyverse)

dat = geo.lookup(state = "NY", place = "New York")  
  state state.name                                                                 county.name place             place.name
1    36   New York                                                                        <NA>    NA                   <NA>
2    36   New York Bronx County, Kings County, New York County, Queens County, Richmond County 51000          New York city
3    36   New York                                                               Oneida County 51011 New York Mills village
dat = dat %>% 
  group_by(state.name, place.name) %>% 
  mutate(county.name = strsplit(county.name, ", ")) %>% 
  unnest
  state state.name place             place.name     county.name
  <chr>      <chr> <int>                  <chr>           <chr>
1    36   New York    NA                   <NA>            <NA>
2    36   New York 51000          New York city    Bronx County
3    36   New York 51000          New York city    Kings County
4    36   New York 51000          New York city New York County
5    36   New York 51000          New York city   Queens County
6    36   New York 51000          New York city Richmond County
7    36   New York 51011 New York Mills village   Oneida County

更新:关于您评论中的第二个问题,假设您已经有了都会区的向量,该如何处理:

dat <- c("New York, NY","Boston, MA","Los Angeles, CA","Dallas, TX","Palo Alto, CA")

df <- map_df(strsplit(dat, ", "), function(x) {
  geo.lookup(state = x[2], place = x[1])[-1, ] %>% 
    group_by(state.name, place.name) %>%
    mutate(county.name = strsplit(county.name, ", ")) %>%
    unnest
})

df
   state    state.name place             place.name        county.name
 1    36      New York 51000          New York city       Bronx County
 2    36      New York 51000          New York city       Kings County
 3    36      New York 51000          New York city    New York County
 4    36      New York 51000          New York city      Queens County
 5    36      New York 51000          New York city    Richmond County
 6    36      New York 51011 New York Mills village      Oneida County
 7    25 Massachusetts  7000            Boston city     Suffolk County
 8    25 Massachusetts  7000            Boston city     Suffolk County
 9     6    California 20802   East Los Angeles CDP Los Angeles County
10     6    California 39612   Lake Los Angeles CDP Los Angeles County
11     6    California 44000       Los Angeles city Los Angeles County
12    48         Texas 19000            Dallas city      Collin County
13    48         Texas 19000            Dallas city      Dallas County
14    48         Texas 19000            Dallas city      Denton County
15    48         Texas 19000            Dallas city     Kaufman County
16    48         Texas 19000            Dallas city    Rockwall County
17    48         Texas 40516       Lake Dallas city      Denton County
18     6    California 20956    East Palo Alto city   San Mateo County
19     6    California 55282         Palo Alto city Santa Clara County

更新2:如果我理解您的评论,对于具有多个县的城市(实际上是示例中的地名),我们只希望包含与城市名称相同的县(例如,对于纽约州,为新县)约克市),否则列表中的第一个县。以下代码选择与城市同名的县,或者如果没有,则选择该城市的第一个县。您可能需要进行一些调整才能使其在整个美国都可以使用。例如,要在路易斯安那州使用它,可能需要gsub(" County| Parish"...而不是gsub(" County"...

map_df(strsplit(dat, ", "), function(x) {
  geo.lookup(state = x[2], place = x[1])[-1, ] %>% 
    group_by(state.name, place.name) %>%
    mutate(county.name = strsplit(county.name, ", ")) %>%
    unnest %>% 
    slice(max(1, which(grepl(sub(" [A-Za-z]*$","", place.name), gsub(" County", "", county.name))), na.rm=TRUE))
})
   state    state.name place             place.name        county.name
   <chr>         <chr> <int>                  <chr>              <chr>
 1    36      New York 51000          New York city    New York County
 2    36      New York 51011 New York Mills village      Oneida County
 3    25 Massachusetts  7000            Boston city     Suffolk County
 4     6    California 20802   East Los Angeles CDP Los Angeles County
 5     6    California 39612   Lake Los Angeles CDP Los Angeles County
 6     6    California 44000       Los Angeles city Los Angeles County
 7    48         Texas 19000            Dallas city      Dallas County
 8    48         Texas 40516       Lake Dallas city      Denton County
 9     6    California 20956    East Palo Alto city   San Mateo County
10     6    California 55282         Palo Alto city Santa Clara County

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多核ARM:如何将关键任务分配给一个专用内核

来自分类Dev

如何将一个精灵(图像)分配给一个矩形?

来自分类Dev

如何将一个char中的值分配给一个指针?

来自分类Dev

如何将4个张量分配给一个更大的张量?

来自分类Dev

如何将一个数组元素分配给另一数组?

来自分类Dev

如何将一个模型的字段的值分配给另一模型的字段?

来自分类Dev

如何将多个处理程序分配给同一个uri?

来自分类Dev

如何将一个类分配给 ID - css

来自分类Dev

如何将布尔对象分配给一个值?

来自分类Dev

HTML - 如何将文本值分配给另一个属性的值?

来自分类Dev

如何将变量列表分配给另一个列表

来自分类Dev

如何将另一个列表分配给“通过引用传递”的列表?

来自分类Dev

如何将另一个文件中的变量分配给类常量?

来自分类Dev

如何将一个数组的值分配给多维数组?

来自分类Dev

如何将Google表格脚本仅分配给一个表格?

来自分类Dev

如何将公式的值(包含变量)分配给另一个变量

来自分类Dev

如何将共享指针的引用分配给另一个共享指针

来自分类Dev

我如何将一个类别分配给复选框

来自分类Dev

如何将多个对象分配给一个数组?

来自分类Dev

我们如何将一个系列分配给ChartArea?

来自分类Dev

C# 从一个数组/任务列表如何将它们分配给特定数据

来自分类Dev

如何将一个对象的实例分配给一个为空的指针?

来自分类Dev

如何将一个枚举值强制转换/分配给另一个枚举

来自分类Dev

如何将一个项目上下文数组分配给一个位置?

来自分类Dev

如何将一个可观察的KnockoutJs分配给另一个可观察的对象?

来自分类Dev

如何将一个JavaScript文件中的变量分配给另一个JS File?

来自分类Dev

如何将一个lambda表达式对象分配给另一个?

来自分类Dev

如何将值从一个对象分配给另一个

来自分类Dev

如何将特定属性从一个对象分配给另一个

Related 相关文章

  1. 1

    多核ARM:如何将关键任务分配给一个专用内核

  2. 2

    如何将一个精灵(图像)分配给一个矩形?

  3. 3

    如何将一个char中的值分配给一个指针?

  4. 4

    如何将4个张量分配给一个更大的张量?

  5. 5

    如何将一个数组元素分配给另一数组?

  6. 6

    如何将一个模型的字段的值分配给另一模型的字段?

  7. 7

    如何将多个处理程序分配给同一个uri?

  8. 8

    如何将一个类分配给 ID - css

  9. 9

    如何将布尔对象分配给一个值?

  10. 10

    HTML - 如何将文本值分配给另一个属性的值?

  11. 11

    如何将变量列表分配给另一个列表

  12. 12

    如何将另一个列表分配给“通过引用传递”的列表?

  13. 13

    如何将另一个文件中的变量分配给类常量?

  14. 14

    如何将一个数组的值分配给多维数组?

  15. 15

    如何将Google表格脚本仅分配给一个表格?

  16. 16

    如何将公式的值(包含变量)分配给另一个变量

  17. 17

    如何将共享指针的引用分配给另一个共享指针

  18. 18

    我如何将一个类别分配给复选框

  19. 19

    如何将多个对象分配给一个数组?

  20. 20

    我们如何将一个系列分配给ChartArea?

  21. 21

    C# 从一个数组/任务列表如何将它们分配给特定数据

  22. 22

    如何将一个对象的实例分配给一个为空的指针?

  23. 23

    如何将一个枚举值强制转换/分配给另一个枚举

  24. 24

    如何将一个项目上下文数组分配给一个位置?

  25. 25

    如何将一个可观察的KnockoutJs分配给另一个可观察的对象?

  26. 26

    如何将一个JavaScript文件中的变量分配给另一个JS File?

  27. 27

    如何将一个lambda表达式对象分配给另一个?

  28. 28

    如何将值从一个对象分配给另一个

  29. 29

    如何将特定属性从一个对象分配给另一个

热门标签

归档