使用长期数据集计算随时间变化的百分比变化

3

我想计算我拥有的一些数据的年度变化。这些数据是以面板/纵向形式呈现的。

数据的格式如下所示:

Year    ZipCode     Value
2011    11411         5
2012    11411         10
2013    11411         20
2011    11345         6
2012    11345         7 
2013    11345         10

我想获得一个数据框,它的形式如下所示

Year Differnce    Zipcode    % Change
2011-2012         11411        100%
2012-2013         11411        100%
2011-2012         11345        16%
2012-2013         11345        42%

2
这是一个好问题,为什么要编辑它以使输入和输出不对应? - thelatemail
抱歉,那是一个错误。已回滚。 - Kobe.A
2个回答

2
一种使用dplyr的方法是通过将当前Value减去先前Value来计算Change,并为每个ZipCodeYear粘贴在一起。"最初的回答"
library(dplyr)

df %>%
  group_by(ZipCode) %>%
  mutate(Change = (Value - lag(Value))/lag(Value) * 100, 
         Year_Diff = paste(lag(Year), Year, sep = "-")) %>%
  slice(-1) %>%
  select(Year_Diff, ZipCode, Change)

#  Year_Diff ZipCode Change
#  <chr>       <int>  <dbl>
#1 2011-2012   11345   16.7
#2 2012-2013   11345   42.9
#3 2011-2012   11411  100  
#4 2012-2013   11411  100  

2
使用`data.table`,我们按'ZipCode'分组,取'Value'的差分,同时将相邻的'Year'连接起来并除以'Value'长度调整后的值。最初的回答如下:

使用data.table,我们按照“ZipCode”进行分组,在获取“Value”的差分时,将相邻的“Year”合并在一起,并且除以经过长度调整后的“Value”的长度。

library(data.table)
setDT(df1)[, .(Change  = 100 *diff(Value)/Value[-.N], 
    Year_Diff = paste(Year[-.N], Year[-1], sep="-")),  .(ZipCode)]
#    ZipCode    Change Year_Diff
#1:   11411 100.00000 2011-2012
#2:   11411 100.00000 2012-2013
#3:   11345  16.66667 2011-2012
#4:   11345  42.85714 2012-2013

数据

df1 <- structure(list(Year = c(2011L, 2012L, 2013L, 2011L, 2012L, 2013L
), ZipCode = c(11411L, 11411L, 11411L, 11345L, 11345L, 11345L
), Value = c(5L, 10L, 20L, 6L, 7L, 10L)), class = "data.frame", 
row.names = c(NA, 
-6L))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接