最近在整理本区域历年的人口数据,需要将其整理为SAS程序分析需要的格式。原始人口数据格式如下:
需转化的格式:
发现通过Excel一个一个粘贴转换比较麻烦,于是尝试运用多个for循环嵌套使用提高转换效率,代码如下:
library(dplyr)
library(stringr)
library(readxl)
library(openxlsx)
mydata<-read_excel("population.xls",header=T)
names(mydata)<-c("year","sex","age","pop")
nn<-table(mydata$year)%>%names()
##将原始数据读入list数据集存放##
kk<-list()
for(i in 1:length(nn)){
kk[[i]]<-filter(mydata,year==nn[i])
}
##创建新数据集列名##
rn<-paste0("F",1:19)
cn<-c("man","woman")
tt<-list()
##在list中创建多个矩阵##
for(i in 1:length(kk)){
tt[[i]]<-matrix(0,length(rn),length(cn),dimnames = list(rn,cn))
}
###嵌套多个for循环,相当于在每个list条目中不断嵌套新的matrix矩阵数据集###
for(w in 1:length(kk)){
for(i in 1:length(rn)){
for(j in 1:2){
tt[[w]][i,j]<-filter(data.frame(kk[[w]]),sex==j,age==age[i])$pop
}
}
}
###循环转置###
ll<-list()
for(i in 1:length(kk)){
ll[[i]]<-t(tt[[i]])
}
###导出到excel###
names(ll)<-c(paste0("year",2013:2015))
write.xlsx(ll,file="pop_transform.xlsx",rowNames=T)
输出结果:
通过多个for循环嵌套使用,能够有效提高数据处理的效率。