是否有更简单的方法来读取r中的不规则数据?

时间:2014-05-08 06:00:12

标签: r

以下是我的数据如下。字符"。"不能被省略,它有特殊意义。

data='编号,学号,性别,民族,籍贯,系部,有无注册学籍,
1,1320207004,男,壮族,广西省,旅游系,有,.,
2,1320207005,女,汉族,重庆市,旅游系,有,,,
3,1320403001,女,汉族,辽宁省,艺术系,有,,,
4,1320403002,女,汉族,广东省,艺术系,有,,,
5,1320403003,女,汉族,四川省,艺术系,有,,,.
6,1320403004,女,汉族,重庆市,艺术系,有,.,,
7,1320403005,男,汉族,海南省,艺术系,有,,,
8,1320403006,男,汉族,海南省,艺术系,有,'

您无法通过以下方式阅读:

read.table(textConnection(data),sep=",",fill=TRUE,header=TRUE)

我这样读了。

r <- read.table(textConnection(data),sep=",",fill=TRUE) 
r <- as.matrix(r)
number <- unname(which(apply(r,2,function(y){all(is.na(y))})))
r <- r[,-number] 
header1 <- as.vector(unname(r[1,])) 
r <- r[-1,]
header1 <- header1[header1!=""]
header2 <- paste("v",1:(ncol(r)-length(header1)),sep="")
header <- c(header1,header2)
colnames(r) <- header
noquote(r)


     编号 学号       性别 民族 籍贯   系部   有无注册学籍 v1   v2
[1,] 1    1320207004 男   壮族 广西省 旅游系 有           .      
[2,] 2    1320207005 女   汉族 重庆市 旅游系 有                  
[3,] 3    1320403001 女   汉族 辽宁省 艺术系 有                  
[4,] 4    1320403002 女   汉族 广东省 艺术系 有                  
[5,] 5    1320403003 女   汉族 四川省 艺术系 有                . 
[6,] 6    1320403004 女   汉族 重庆市 艺术系 有           .      
[7,] 7    1320403005 男   汉族 海南省 艺术系 有                  
[8,] 8    1320403006 男   汉族 海南省 艺术系 有                  

1 个答案:

答案 0 :(得分:3)

这是一种方式:

raw <- read.table(textConnection(data),sep=",",fill=TRUE)
dat <- setNames(raw[-1,-9], c(as.character(unlist(raw[1,-c(8:10)])), "v1", "v2"))

结果(dat):

  编号       学号 性别 民族   籍贯   系部 有无注册学籍 v1 v2
2    1 1320207004   男 壮族 广西省 旅游系           有  .   
3    2 1320207005   女 汉族 重庆市 旅游系           有      
4    3 1320403001   女 汉族 辽宁省 艺术系           有      
5    4 1320403002   女 汉族 广东省 艺术系           有      
6    5 1320403003   女 汉族 四川省 艺术系           有     .
7    6 1320403004   女 汉族 重庆市 艺术系           有  .   
8    7 1320403005   男 汉族 海南省 艺术系           有      
9    8 1320403006   男 汉族 海南省 艺术系           有