2013-06-25 41 views
11

在R中,是否有像read.csv这样的函数读取文件头部位于左侧(或右侧)而不是顶部,并且数据从左到右排列?读取水平组织的CSV文件

所以数据会看起来像:

var1,1,2,3,4,5 

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

+0

你能给的最小2或3线例子,说明你的文本数据看起来?你的意思是每条线就像:'var1,1,2,3,4,5'? – thelatemail

+0

是的,就像那样。所以在这种情况下,标题是最左边一列。 –

+1

*如果*所有变量都是数字,那么您可以按照您的建议进行操作; 'x < - read.csv(...); y < - setNames(as.data.frame(t(x [, - 1])),as.character(x [,1]))' –

回答

14

比方说,你的文件被称为“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