函数:将矩形数据转换成面板数据(并生成表头)未完成

来源:互联网 发布:成都办公软件机构 编辑:程序博客网 时间:2024/06/08 18:34

法一:transdata <-function(x){y <- as.matrix(x

t1 <- x[,1]    //提取第一列元素

t2 <- colnames(y)[-1]    //提取标题行(去掉第一个) #默认得到列向量

bt <- expand.grid(t1,t2)   //将t1、t2两个列向量拼接在一起 e.g..前18行第一列:为武汉到高速路;第二列全为:Y2002(后每18行变一次年份)

z <- as.vector(y[,-1])   //将矩阵y去掉第一列后的数据按列依次拼接得到一个列向量z. #as.vector不能直接对数据框x使用,故前把数据框变成矩阵

m <- cbind(bt,z)  //将生成的新表头和向量z拼接

n <- fix(m)

return(n)}

dr <- read.csv(file="/Users/harriet/Documents/R语言/xunhuan/gdp.csv")

transdata(dr)


   district Y2002 Y2003 Y2004 Y2005 Y2006   Y2007   Y2008   Y2009   Y2010     Y2011
1    武汉市    NA    NA    NA    NA    NA 3141.90 3960.08 4620.18 5565.93 6756.2000
2    黄石市    NA    NA    NA    NA    NA  466.68  556.57  571.59  690.12  925.9600
3    襄阳市    NA    NA    NA    NA    NA  785.45 1002.46 1201.01 1538.30 2132.2200
4    荆州市    NA    NA    NA    NA    NA  519.63  623.98  709.58  837.10 1043.1200
5    宜昌市    NA    NA    NA    NA    NA  820.90 1026.56 1272.33 1547.32 2140.6900
6    十堰市    NA    NA    NA    NA    NA  411.42  487.64  550.96  736.78  851.2500
7    孝感市    NA    NA    NA    NA    NA  480.79  593.06  672.88  800.67  958.1600
8    荆门市    NA    NA    NA    NA    NA  420.08  520.36  600.10  730.07  942.5900
9    鄂州市    NA    NA    NA    NA    NA  280.71  269.79  323.71  395.29  490.8900
10   黄冈市    NA    NA    NA    NA    NA  473.74  600.75  730.19  862.30 1045.1100
11   咸宁市    NA    NA    NA    NA    NA  286.75  359.19  418.45  520.33  652.1000
12   随州市    NA    NA    NA    NA    NA  257.62  310.20  341.91  401.66  517.9900
13   恩施州    NA    NA    NA    NA    NA  210.35  249.18  294.26  351.13  418.1900
14   仙桃市    NA    NA    NA    NA    NA  190.40  233.50  242.55  290.97  378.4500
15   潜江市    NA    NA    NA    NA    NA  156.63  211.82  234.01  290.67  378.2100
16   天门市    NA    NA    NA    NA    NA  151.48  187.35  186.86  219.48  274.5200
17   林  区    NA    NA    NA    NA    NA    6.96    7.97   10.29   12.30   14.5301
18 高速公路    NA    NA    NA    NA    NA      NA      NA      NA      NA        NA



法二:如果要读入的文件都在一个文件夹中

transdata <- function(filename) {
  dat1 <- read.csv(filename)
  as.vector(as.matrix(dat1[,-1]))
}

setwd("/Users/harriet/Documents/R语言/xunhuan/").   //设置统一的路径,减少重复

Lst <- list()   //生成列表来储存数据
for (i in dir()) Lst[[which(i==dir())]] <- transdata(i).     //将数据依次读入一个list中

a <- sapply(Lst,function(x) x)或a <- sapply(Lst,function(x) x[,3]).      //

dat3 <- cbind(表头,a)














阅读全文
0 0