Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用mutate在数据帧的一列中查找两年之间的差异?_R_Dplyr - Fatal编程技术网

R 如何使用mutate在数据帧的一列中查找两年之间的差异?

R 如何使用mutate在数据帧的一列中查找两年之间的差异?,r,dplyr,R,Dplyr,嗨,我是R的tidyverse新手,正在尝试一个项目 我的数据帧(ab): 我使用mutate创建了基于zip的人口与收入比率: dmg_ratio <- ab %>% filter(Year %in% c(2014,2015,2016,2017)) %>% group_by(Zip) %>% mutate(Poptoincomeratio = Total_Population/Median_Income) dmg_ratio 我想找出2014年至2016

嗨,我是R的tidyverse新手,正在尝试一个项目

我的数据帧(ab):

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

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

dmg_ratio
我想找出2014年至2016年这一新产生的变异(Poptoincomeratio)的每个邮政编码的差异,以了解这些年来人口与收入比率是否有任何变化。
我怎样才能做到这一点呢?

事实上,这有一个解决办法,我假设您每年都会填写“Poptoincomeratio”列 那么,试试这个

library(tidyr)
new_ab <- ab %>% select(-Total_Population ,-Median_Income ) %>% spread(Year,Poptoincomeratio)
library(tidyr)
新的百分比选择(总人口,-中位收入)%>%的分布(年份,人口)

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

您如何获得预期产出?看起来这只是前3行的dmg_比率?@RonakShah我想要的基本输出是2014年邮政编码00601的比率为1.67,2015年相同的邮政编码的比率为3.26。我想得到不同。我重新编辑了我的输出重复以获得更好的清晰度,例如
dmg\u比率%>%groupby(Zip)%%>%arrange(Year)%%>%mutate(difference=Poptoincomeratio-lag(Poptoincomeratio))
使用
dplyr
?@Ronaksah出于某种原因,这会返回NA,尽管这似乎是OP的预期输出。@NelsonGon会的,因为示例中每个
Zip
只有行共享,所以没有什么可以减去的,但我假设这只是OP共享的样本数据,并且他们的实际数据有很多每个邮政编码的行。为什么在这两个元素之前使用-Total_Population,-medium_Income,-减号?我是r新手,试图理解syntaxIn select减号(-)指的是排除带有减号的列,因此我们删除这两列,因为所有的观测值都是唯一的,如果我使用扩展函数而不删除这些列,扩展函数将无法按我希望的方式正常工作。我建议您阅读文档并使用Spread and Gather函数,它在将来可能会派上用场。
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 
library(tidyr)
new_ab <- ab %>% select(-Total_Population ,-Median_Income ) %>% spread(Year,Poptoincomeratio)