R 中某列的总变化百分比?

问题描述 投票:0回答:1

我有一个 R 面板数据集,记录了几年来城市人口的百分比变化。简化版本如下所示:

city_pop<-tibble(city=c("NYC", "NYC", "LA", "LA"), 
       percentpopchange=c("0.1", "0.2", "0.5", "0.3"), 
       year=c(1980, 1981, 1980, 1981))

我想计算 1980 年和 1981 年纽约市和洛杉矶的人口变化(百分比)。例如,纽约市为 0.32。我理想的具有此类输出的数据集是:

cum_city_pop<-tibble(city=c("NYC", "LA"), 
       total_percentpopchange=c("0.32", "0.93"))

R 有什么办法可以做到这一点吗?我将非常感谢任何帮助。

r dataframe tibble panel-data
1个回答
0
投票

如果我们假设 1980 年纽约的人口为 1,000,那么 1980 年和 1981 年之后其人口变化如下:

1980 年:1000 美元 + 1000 美元*0.1 = 1100 美元

1981 年:1100 美元 + 1100 美元*0.2 = 1320 美元。

因此,在 1980 年和 1981 年期间,纽约州的人口增长了以下几倍: ($1320-$1000)/$1000 = 0.32.

下面粘贴了一些计算此值的 R 代码:

city_pop<-tibble(city=c("NYC", "NYC", "LA", "LA"), 
                 percentpopchange=c("0.1", "0.2", "0.5", "0.3"), 
                 year=c(1980, 1981, 1980, 1981))
city_pop$percentpopchange <- as.numeric(city_pop$percentpopchange)

cum_city_pop_final <- tibble(city=unique(city_pop$city))

unique_cities <- unique(city_pop$city)
total_percent_pop_changes <- c()
for (i in 1:length(unique(city_pop$city))){
  pop <- 100
  for (j in 1:length(unique(city_pop$year))){
    pop <- pop + pop * city_pop$percentpopchange[which(city_pop$city==unique(city_pop$city)[i] & city_pop$year==unique(city_pop$year)[j])]
    if (j==length(unique(city_pop$year))){
      total_percent_pop_changes <- c(total_percent_pop_changes, (pop-100)/100)
    }
  }
}

cum_city_pop_final$total_percentpopchange <- total_percent_pop_changes

顺便说一句,我认为 1980-1981 年间洛杉矶的总人口变化百分比将是 0.95,而不是 0.93。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.