【问题标题】:Calculating percentage change from a fixed year for different group计算不同组的固定年份的百分比变化
【发布时间】:2020-10-18 14:21:56
【问题描述】:

我想计算不同城市的变量“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))

但它计算的是每年之间的百分比变化,我正在尝试计算 2000 年和 2002 年、2000 年和 2004 年等等之间的变化......

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    您可以使用match 得到对应的var2 where 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
    

    如果保证每个城市只有1年价值2000,我们也可以使用==

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

    【讨论】:

      【解决方案2】:

      我们可以使用%in%,如果有NAs也可以使用

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-24
        • 2022-01-26
        • 2020-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多