我如何使用dplyr查找按年份和邮政编码划分的人口差异?
我正在处理ACS数据,我已经使用dplyr包将我的数据过滤到这个位置。然而,我正在尝试使用dplyr中的mutate来查找2013年至2016年总人口的增长和减少情况(基于邮政编码)。例如,我想创建一个新列,为zip 43001查找2013年至2016年总人口的差异 我的意见:我如何使用dplyr查找按年份和邮政编码划分的人口差异?,r,dplyr,R,Dplyr,我正在处理ACS数据,我已经使用dplyr包将我的数据过滤到这个位置。然而,我正在尝试使用dplyr中的mutate来查找2013年至2016年总人口的增长和减少情况(基于邮政编码)。例如,我想创建一个新列,为zip 43001查找2013年至2016年总人口的差异 我的意见: filterdacs_D1 <- mutate(filename,difference1 =$zip$total_population[total_population]-$zip$total_population
filterdacs_D1 <- mutate(filename,difference1 =$zip$total_population[total_population]-$zip$total_population2017)
如何在R中实现这一点?对于这样的问题,有很多帮助,但我可能会这样攻击它:
library(tidyverse)
zips <- tibble::tribble(
~Year, ~Zip, ~Total_Population, ~Median_Income, ~City,
2013, "ZCTA5 43001", 2475, 87333, "Alexandria OH",
2013, "ZCTA5 43002", 2753, 83873, "Amlin OH",
2014, "ZCTA5 43003", 2366, 46691, "Ashley OH",
2014, "ZCTA5 43001", 24625, 70809, "Blacklick OH",
2014, "ZCTA5 43005", 155, 43810, "Bladensburg OH",
2015, "ZCTA5 43006", 705, 45673, "Brinkhaven OH",
2015, "ZCTA5 43001", 2430, 28422, "Buckeye Lake OH",
2016, "ZCTA5 43009", 2036, 62188, "Cable OH",
2016, "ZCTA5 43010", 386, 34625, "Catawba OH",
2016, "ZCTA5 43001", 7733, 66548, "Centerburg OH"
)
diff <- zips %>% dplyr::filter(Year %in% c(2013,2016)) %>%
spread(Year,Total_Population) %>% group_by(Zip) %>%
summarise(`Total2013` = sum(`2013`, na.rm = TRUE),
`Total2016` = sum(`2016`, na.rm = TRUE)) %>%
mutate(Difference = Total2013- Total2016)
diff
库(tidyverse)
拉链%
传播(年,总人口)%>%按(Zip)分组%>%
总结(`Total2013`=sum(`2013`,na.rm=TRUE),
`Total2016`=总和(`2016`,na.rm=TRUE))%>%
变异(差异=2013年总计-2016年总计)
差异
你必须把你的问题分解成更小的部分,而不是试图认为只有一个函数可以完成你想要的任务。在你的代码中,你提到了一些与你显示的数据不匹配的事情:你的人口列被命名为“Total_population”,而不是“population”,并且你曾经拼错了“population”。你有
$zip$population
,这也没有意义-我不确定$zip
应该在那里做什么。最简单的方法可能就是使用tidyr::spread
为每个year@camille谢谢,我已经编辑了上面的内容,但仍然不对。R区分大小写,因此total_population!=总人口
。看看groupby
,但是如果没有真正的分类,我们就不能做更多了。@camille如果我每年都做专栏,我该如何考虑邮政编码?因为我正在寻找基于邮政编码的数据,例如2016年至2013年,10个邮政编码的总人口下降幅度最大。我是R的新手。感谢您的见解。此外,如果您试图将原始数据帧放入tibble::tribble()中,我尝试使用zips,但它不会起作用。只需复制tible::tribble()语句之后的所有内容,并在原始dataframe.Correct上运行它。但我面临的问题是,dataset有50个邮政编码,并且并非所有数据都会在控制台中同时显示,因此我无法粘贴所有数据并使用tibble()执行上述操作。我可以每次过滤并使用10个邮政编码,但我想知道是否有更有效的方法使用如此大的数据框架来处理和处理数据。如果您已经拥有数据框架形式的数据,您可以跳过tribble部分,然后从这里开始diff%dplyr::filter(Year%in%c(20132016))%>%spread(年,总人口)%%>%按(Zip)分组%>%总结(`Total2013`=sum(`2013`,na.rm=TRUE),`Total2016`=sum(`2016`,na.rm=TRUE))%%>%变异(差异=Total2013-Total2016)差异
library(tidyverse)
zips <- tibble::tribble(
~Year, ~Zip, ~Total_Population, ~Median_Income, ~City,
2013, "ZCTA5 43001", 2475, 87333, "Alexandria OH",
2013, "ZCTA5 43002", 2753, 83873, "Amlin OH",
2014, "ZCTA5 43003", 2366, 46691, "Ashley OH",
2014, "ZCTA5 43001", 24625, 70809, "Blacklick OH",
2014, "ZCTA5 43005", 155, 43810, "Bladensburg OH",
2015, "ZCTA5 43006", 705, 45673, "Brinkhaven OH",
2015, "ZCTA5 43001", 2430, 28422, "Buckeye Lake OH",
2016, "ZCTA5 43009", 2036, 62188, "Cable OH",
2016, "ZCTA5 43010", 386, 34625, "Catawba OH",
2016, "ZCTA5 43001", 7733, 66548, "Centerburg OH"
)
diff <- zips %>% dplyr::filter(Year %in% c(2013,2016)) %>%
spread(Year,Total_Population) %>% group_by(Zip) %>%
summarise(`Total2013` = sum(`2013`, na.rm = TRUE),
`Total2016` = sum(`2016`, na.rm = TRUE)) %>%
mutate(Difference = Total2013- Total2016)
diff