#合并人口数据，并计算10年1组的平均人口，平均患病人数
# -------------------------------------------------------------------------

rm(list=ls())


# 加载需要的包
library(readr)
library(data.table)
library(tidyverse)

# 设定路径
# setwd("D:\\李远存文件（千万别打开！！！）\\课题-GBD相关\\APC模型\\全球2型糖尿病与糖网趋势分析\\原始数据")  # 已注释：请按本地环境设置工作目录
# 读取数据
# 如果是单个文件单独读取
mydata <- read.csv("原始数据.csv",header = T)
# 如果是多个文件批量读取
dir <- "D:\\李远存文件（千万别打开！！！）\\课题-GBD相关\\APC模型\\全球糖网发病趋势分析\\糖网原始数据"
files <- list.files(dir,pattern = ".csv",full.names = T)
mydata <- map_dfr(files,read.csv)

# 查看数据
str(mydata)
unique(mydata$measure)
unique(mydata$measure)
unique(mydata$location)
unique(mydata$sex)
unique(mydata$age)
unique(mydata$cause)
unique(mydata$metric)
unique(mydata$year)

# 按照下面条件筛选数据
mydata2 <- mydata %>%
  filter(measure=="Prevalence") %>% 
  filter(cause!="Diabetes mellitus") %>%
  # filter(rei!="Blindness and vision loss") %>% 
  filter(metric=="Number") %>% 
  filter(age!="All Ages")

# 批量读取人口数据
dir = "D:\\李远存文件（千万别打开！！！）\\数据-population GBD\\5year"  

#获得csv文件列表
files <- list.files(dir,
                    pattern = ".CSV",
                    full.names = T)

# 批量读取，合并到一个文件夹中
data2 <- map_dfr(files,read.csv)

data <- data2 %>% 
  select(location_name,sex_name,age_group_name,year_id,metric_name,val)

colnames(data) <- c("location","sex","age","year","metric","val")

data$sex[data$sex=="male"] <- "Male"
data$sex[data$sex=="female"] <- "Female"
data$sex[data$sex=="both"] <- "Both"

# 匹配筛选人口数据
df <- left_join(mydata2,data,by=c("location","sex","age","metric","year"))

colnames(df)[9] <- "prevalence"
colnames(df)[12] <- "population"

df <- df %>% 
  mutate(population=round(population,digits = 0)) %>% 
  mutate(prevalence=round(prevalence,digits = 0)) %>% 
  select(location,sex,age,cause,rei,year,prevalence,population) %>% 
  arrange(location,sex,age,cause,rei,year) 

# 缺失值的处理（这里可以将没有数据的值赋予1，也可以将数据删除）
# 注意，不同疾病在年龄段的数据缺失上是不一样的，如果将疾病类型作为协变量放入模型，可能会引起错误。
# df$prevalence[df$prevalence==0] <- 1 #用1取代
df <- df %>% filter(prevalence!=0)#删除缺失值

# 生成age2,period,cohort
age2 <- df$age
age2[age2=="95 plus"] <- "95 to 99"
a <- unlist(strsplit(age2,split=" to "))
a <- matrix(as.numeric(a),ncol=2,byrow=T)
age2 <- a[,1]
df$age2 <- age2
df$period <- df$year
df <- df %>% mutate(cohort=period-age2)

# 生成5-years period group(period2),并按照字符串求平均prevalence
# unique(df$period)
df <- df %>% mutate(period2=ifelse(period<1995,"90~94",
                                   ifelse(period<2000,"95~99",
                                          ifelse(period<2005,"00~04",
                                                 ifelse(period<2010,"05~09",
                                                        ifelse(period<2015,"10~14","15~19"))))))
df <- df %>% 
  group_by(location,sex,cause,rei,age,period2) %>% 
  mutate(case=round(mean(prevalence),digits = 0)) %>% 
  mutate(population2=round(mean(population),digits = 0))

df <- df %>% 
  filter(period%in%c(1990,1995,2000,2005,2010,2015)) %>% 
  select("location","sex","age","cause","rei","year","age2","period","cohort","period2","case","population2")
  
colnames(df) <- c("location","sex","age_group","cause","rei","year",
                  "age","period","cohort","period_group","case","population")

df <- df %>% 
  select(location,cause,rei,sex,year,age_group,period_group,
         age,period,cohort,case,population) %>% 
  arrange(location,cause,rei,sex,age,period)


# 写出所有数据df
# write.csv(df,"df.csv",row.names = F)

# 去除global数据,生成经济/地理标签：region
df2 <- df %>% 
  filter(location!="Global") %>% 
  mutate(region=ifelse(location%in%c("High-middle SDI","High SDI","Low-middle SDI",                  
                                     "Middle SDI","Low SDI"),"economic","geographic"))
# 给region标签排序，生成region2
df2 <- df2 %>%  
  mutate(region2=ifelse(location=="African Region","1",
                        ifelse(location=="Eastern Mediterranean Region","2",  
                               ifelse(location=="European Region","3",  
                                      ifelse(location=="Region of the Americas","4",
                                             ifelse(location=="South-East Asia Region","5", 
                                                    ifelse(location=="Western Pacific Region","6", 
                                                           ifelse(location=="Low SDI","a",  
                                                                  ifelse(location=="Low-middle SDI","b",  
                                                                         ifelse(location=="Middle SDI","c",
                                                                                ifelse(location=="High-middle SDI","d","f")))))))))))

# 按照病因写出数据
list <-  unique(df2$cause) 
for(i in list){  
  assign(paste("cause", i, sep = ""),df2 %>% filter(cause == i))  
  tmp <- get(paste("cause", i, sep=""))  
  write.csv(tmp,paste(i,".csv", sep = ""),row.names = F) 
}

