读取水平组织的CSV文件

时间:2013-06-25 02:30:42

标签: r csv read.table

在R中,是否有类似read.csv的函数读入文件,其中标题位于左侧(或右侧)而不是顶部,数据是从左到右组织的?

所以数据看起来像:

var1,1,2,3,4,5

查看read.tableread.csv的文档,似乎没有任何内容。我看到使用这些函数的最佳选择是使用read.table然后构造另一个表,其列是原始数据的行,依此类推。

1 个答案:

答案 0 :(得分:20)

假设您的文件名为'data.csv',它包含:

var1,1,2,3,4,5,6
var2,2.1,3.9,4.6,5.2,6.1
var3,M,F,M,F,M,M

注意var1var3有6个值,但var2只有5个。 因此,想法是读取数据,转置它然后使用read.csv

read.tcsv = function(file, header=TRUE, sep=",", ...) {

  n = max(count.fields(file, sep=sep), na.rm=TRUE)
  x = readLines(file)

  .splitvar = function(x, sep, n) {
    var = unlist(strsplit(x, split=sep))
    length(var) = n
    return(var)
  }

  x = do.call(cbind, lapply(x, .splitvar, sep=sep, n=n))
  x = apply(x, 1, paste, collapse=sep) 
  out = read.csv(text=x, sep=sep, header=header, ...)
  return(out)

}

然后,你可以这样做:

  

read.tcsv( “data.csv”)

  var1 var2 var3
1    1  2.1    M
2    2  3.9    F
3    3  4.6    M
4    4  5.2    F
5    5  6.1    M
6    6   NA    M