R 计算不同组固定年份的百分比变化

R 计算不同组固定年份的百分比变化,r,dplyr,R,Dplyr,我想计算不同城市变量“var2”相对于2000年的百分比变化 我试过这个: library(dplyr) data <- data.frame(cities= c('NY','NY','NY','NY','NY','PL','PL', 'PL','PL','PL','AS','AS','AS','AS','AS','RY','RY','RY','RY','RY', 'JK', 'JK', 'JK', 'JK', 'JK'), year=c('2000', '2002', '2004', '

我想计算不同城市变量“var2”相对于2000年的百分比变化

我试过这个:

library(dplyr)
data <- data.frame(cities= c('NY','NY','NY','NY','NY','PL','PL', 'PL','PL','PL','AS','AS','AS','AS','AS','RY','RY','RY','RY','RY', 'JK', 'JK', 'JK', 'JK', 'JK'), year=c('2000', '2002', '2004', '2006', '2008', '2000', '2002', '2004', '2006', '2008','2000', '2002', '2004', '2006', '2008','2000', '2002', '2004', '2006', '2008','2000', '2002', '2004', '2006', '2008'), 
                    var2 = c(12,26,17,8,14, 12,20,10,8,14,12,20,10,8,14,12,20,10,8,14,12,20,10,3,5))

changes <- data2 %>%
    group_by(cities) %>%
    arrange(year, .by_group = TRUE) %>%
    mutate(variable_change = round((var2/lag(var2) - 1)*100, digits = 1))
库(dplyr)
数据%
安排(年份,.by_group=TRUE)%>%
变异(变量_change=round((var2/lag(var2)-1)*100,位数=1))

但是它计算了每年之间的百分比变化,我试图计算2000年和2002年、2000年和2004年之间的变化等等…

你可以使用
匹配
得到相应的
var2
,其中
year=2000
,然后用每个城市的
var2
值除以它

library(dplyr)

data %>%
  group_by(cities) %>%
  mutate(variable_change = var2/var2[match(2000, year)])

#  cities year   var2 variable_change
#   <chr>  <chr> <dbl>           <dbl>
# 1 NY     2000     12           1    
# 2 NY     2002     26           2.17 
# 3 NY     2004     17           1.42 
# 4 NY     2006      8           0.667
# 5 NY     2008     14           1.17 
# 6 PL     2000     12           1    
# 7 PL     2002     20           1.67 
# 8 PL     2004     10           0.833
# 9 PL     2006      8           0.667
#10 PL     2008     14           1.17 
# … with 15 more rows
data %>%
  group_by(cities) %>%
  mutate(variable_change = var2/var2[year == 2000])

我们可以在%
中使用
%,当存在
NA
s时,它也会起作用

library(dplyr)
data %>%
      group_by(cities) %>%
      mutate(variable_change = var2/var2[year %in% 2000])