【问题标题】:How do I use a data frame subset without namesakes of other columns being included?如何在不包含其他列的同名列的情况下使用数据框子集?
【发布时间】:2020-11-18 06:44:13
【问题描述】:

(抱歉标题不好,英语不是我的母语,我想不出一个总结问题的好方法。)

我有一个包含各种美国县变量的数据集和一个美国县的 shapefile。我已经将两者合并,没问题,现在我试图说明一个跨特定州县的变量。但是当我试图将我的数据限制在特定州的县时,它不仅选择了该特定州的县,而且还选择了与该州同名的其他州的所有县。我只是不明白为什么要这样做,据我所知,它确实应该只选择指定州的县。

我正在使用 sf、tmap、tmaptools、dplyr、ggplot 和小册子包。这是我正在使用的代码:

mydata <- readr::read_csv("county_facts.csv")

mymap <- st_read("cb_2014_us_county_500k.shp")

map_and_data <- inner_join(mymap, mydata, by = c("NAME" = "area_name"))

tm_shape(map_and_data[map_and_data$state_abbreviation == "SC",])+
  tm_polygons("AGE135214", id = "NAME", palette = "Greens")

(县名列在 shapefiles 中为“NAME”,在数据集中为“area_name”)

这里 AGE135214 是我正在绘制的变量,NAME 是县名,在这个例子中,我试图为南卡罗来纳州绘制它。我尝试通过更改数据和 shapefile 的合并来解决此问题:

map_and_data2 <- inner_join(mymap, mydata[mydata$state_abbreviation=="SC",], by = c("NAME" = "area_name"))

但这只会导致新的合并数据框包含错误的同名。

我是编程新手,如果有非常明显的解决方案,我深表歉意。非常感谢任何帮助!

数据和 shapefile 来自 https://www.kaggle.com/benhamner/2016-us-election,如果有帮助的话。

【问题讨论】:

    标签: r


    【解决方案1】:

    欢迎。当我第一次开始使用县级数据时,我遇到了这个问题。问题是“NAME”和“area_name”完全不同(只要快速浏览一下,您就会发现 area_name 中有很多额外的单词,比如 'county' 会阻止连接工作)。我发现使用县数据使用 fips 代码进行连接是最佳做法。地图数据没有准备好 fips 列,但可以轻松构建。我已经在下面实现了它,它似乎对我有用。希望您有美好的一天,并祝您的项目好运。

    mymap$fips <- as.numeric(paste0(mymap$STATEFP, mymap$COUNTYFP))
    
    map_and_data <- left_join(mymap, mydata, by = "fips")
    
    
    tm_shape(map_and_data %>% filter(state_abbreviation == "SC"))+
      tm_polygons("AGE135214", id = "NAME", palette = "Greens")
    

    【讨论】:

    • 哦,当然!效果很好! :) 非常感谢你,我希望你也有美好的一天! :)
    猜你喜欢
    • 2021-11-17
    • 2018-03-18
    • 2012-09-19
    • 2020-05-28
    • 2019-08-27
    • 2021-05-03
    • 2016-11-02
    • 1970-01-01
    • 2021-07-21
    相关资源
    最近更新 更多