【问题标题】:How can I use mutate to find the difference between two years in one column of my dataframe?如何使用 mutate 在我的数据框的一列中找到两年之间的差异?
【发布时间】:2019-08-19 23:08:47
【问题描述】:

您好,我是 R 中 tidyverse 的新手,正在尝试做一个项目

我的数据框(ab):

 Year       Zip     Total_Population Median_Income      City State
1 2014      00601            18088         10833  Adjuntas    PR
2 2014      00602            40859         16353    Aguada    PR
3 2015      00603            53162         16323 Aguadilla    PR
4 2015      00606             6415         14138   Maricao    PR
5 2016      00610            28805         17265    Anasco    PR
6 2016      00612            66251         17752   Arecibo    PR

我使用 mutate 来创建基于 zip 的人口收入比:

dmg_ratio <-  ab %>% filter(Year %in% c(2014,2015,2016,2017)) %>% 
  group_by(Zip) %>%
  mutate(Poptoincomeratio = Total_Population/Median_Income)

dmg_ratio

输出代表:

Year Zip           Total_Population Median_Income City      State Poptoincomeratio
 2014 ZCTA5 00601            18088         10833 Adjuntas    PR               1.67 
 2014 ZCTA5 00602            40859         16353 Aguada      PR               2.50 
 2015 ZCTA5 00601            53162         16323 Adjuntas    PR               3.26 

我想找出每个邮政编码从 2014 年到 2016 年新创建的突变(Poptoincomeratio)的差异,以了解这些年来人口收入比是否有任何变化。 我怎么能做到这一点?

【问题讨论】:

  • 如何获得预期的输出?看起来它只是dmg_ratio 的前 3 行?
  • @RonakShah 基本上我想要的输出是 2014 年邮政编码 00601 的比率为 1.67,而 2015 年相同的邮政编码比率为 3.26。我想有所作为。为了更清晰,我重新编辑了我的输出表达式
  • 类似dmg_ratio %&gt;% group_by(Zip) %&gt;% arrange(Year) %&gt;% mutate(difference = Poptoincomeratio - lag(Poptoincomeratio)) 使用dplyr ?
  • @RonakShah 出于某种原因,这会返回 NA,尽管这似乎是 OP 的预期输出。
  • @NelsonGon 它会因为在共享的示例中每个Zip 只有一行,所以没有什么可减去的,但我假设这只是 OP 共享的样本数据,他们的实际数据有很多每个Zip 都有很多行。

标签: r dplyr


【解决方案1】:

实际上,有一个解决方法,我假设您每年都填写“Poptoincomeratio”列 然后,试试这个

library(tidyr)
new_ab <- ab %>% select(-Total_Population ,-Median_Income ) %>% spread(Year,Poptoincomeratio)

在此之后,您可以再次申请 mutate 以获得两年之间的差异。

【讨论】:

  • 为什么在这两个元素之前使用了 -Total_Population ,-Median_Income 减号?我是 r 新手并试图理解语法
  • 在选择减号(-)中指的是排除带有减号的列,因此我们要删除这两列,因为所有观察结果都是唯一的,如果我使用传播函数而不删除这些列,传播功能不会按我想要的方式正常工作。我建议你阅读Spread and Gather函数的文档和使用,将来可能会派上用场。
猜你喜欢
  • 2013-10-09
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-22
  • 2013-03-24
  • 2013-07-12
相关资源
最近更新 更多