2

我很难用 R(使用 dplyr)从下一个(dfx)创建一个新表。ID 可以是地理区域。对于它们中的每一个,我都有一个随时间(年)变化的值(值)。

library(dplyr)

ID<-c(1, 1, 1, 2, 2, 3, 3, 3, 3)
Year <-c(1960,1970, 1975, 1970, 1995, 1970, 1990, 2000, 2005)
Value<-c(2, 4.5, 6.2, 3.2, 7.8, 3.2, 4.6, 6.7, 8.9)
dfx<-data_frame(ID, Year, Value)

我想做的是按照以下公式计算每个时期的年度变化[(final value/starting value)^(1/number of years)-1]*100

这将给出以下df

ID<-c(1,1, 2, 3,3,3)
Periods<-c("1960-1970", "1970-1975", "1970-1995", "1970-1990","1990-2000","2000-2005") 
annual_var<-c(8.44, 6.61, 3.62, 1.83, 3.83, 5.84)
dfy<-data_frame(ID, Periods, annual_var) 

我无法弄清楚要遵循的最佳策略是什么。你可以帮帮我吗?

4

1 回答 1

2

使用,dplyr我们可以将当前和下一个一起使用,然后使用给定的公式计算并忽略每个组中的最后一行 ( ),因为最后一个 Period 将为空。group_by IDpasteYearleadannual_varslice(-n())

library(dplyr)
dfx %>%
  group_by(ID) %>%
  mutate(Periods = paste0(Year, "-", lead(Year)), 
     annual_var = ((lead(Value)/Value) ^ (1/(lead(Year) - Year)) - 1) * 100) %>%
  slice(-n()) %>%
  select(-Year, -Value)

#    ID   Periods   annual_var
#   <dbl> <chr>          <dbl>
#1    1. 1960-1970       8.45
#2    1. 1970-1975       6.62
#3    2. 1970-1995       3.63
#4    3. 1970-1990       1.83
#5    3. 1990-2000       3.83
#6    3. 2000-2005       5.84
于 2018-10-10T13:08:17.967 回答