我有一个 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 有什么办法可以做到这一点吗?我将非常感谢任何帮助。
如果我们假设 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。