最近在整理本区域历年的人口数据,需要将其整理为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循环嵌套使用,能够有效提高数据处理的效率。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/219705.html原文链接:https://javaforall.net
