法一: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)