0

我是这个论坛和 R 的新手。我正在进行一项生态研究,并使用人口普查数据在华盛顿州开发一个数据集,除以邮政编码,其中包含以下变量:“total_pop”、“中位年龄”、“中位数”男性年龄”、“女性中位年龄”、“流行男性总数”、“流行女性总数”、“白人”、“黑人”、“美国印第安人/阿尔斯坎人”、“亚洲人”、“夏威夷原住民”、“其他种族” , “2+ 种族”。我使用我在网上找到的一个名为 tidycensus 的软件包从 ACS 5 年估计数据集中获取数据,我遇到了几个问题,希望你能帮助我。

我的主要问题是数据集没有按照我的喜好配置。我曾设想数据集会有一个输出,其中邮政编码是行,列是变量,这样每个邮政编码都会有 14 个相关变量。例如,对于 2018 年给定的邮政编码 (12345),我想要(顶部)配置,而不是我目前得到的底部配置。所需的配置

这是我捕获的当前数据的一个示例。[当前数据集] 2

我遇到的另一个问题是,包中的 get_acs 函数不能给我特定州的邮政编码,而是整个美国,所以我的数据集目前有大部分我不需要的邮政编码。如果我要查找华盛顿州的所有邮政编码,有没有办法只包括华盛顿州特定的邮政编码。提前感谢大家的帮助,我想重申一下,我肯定是 R 的新手,所以任何/所有的帮助都将不胜感激。

4

1 回答 1

0

您的主要问题称为从长数据集到宽数据集。

首先,您可以直接在get_acs()函数中重命名变量,因为关闭变量代码可能很难。

country <- get_acs(geography = "zcta", 
                   # Include and rename desired variables here
                   variables = c(totPop = "B01003_001",
                                 medAge = "B01002_001"), 
                   year = 2018)

然后我将数据子集化为仅包含 WA 邮政编码 (98001-99403)。我还删除了误差列,因为它使spread()函数变得奇怪。希望你不需要它。

wa <- country %>%
  filter(GEOID >= 98001 & GEOID <= 99403) %>%
  select(-moe)

spread()最后,这一步是使用tidyr 包中的函数从长数据集转换为宽数据集。

wide_wa <- wa %>%
  spread(variable, estimate)

希望你能得到这样的东西

于 2020-10-26T22:57:41.937 回答