Reading a CSV file organized horizontally

后端 未结 1 1123
谎友^
谎友^ 2020-12-03 02:06

In R, is there a function like read.csv that reads in files where the headers are on the left (or right) as opposed to the top and the data is organized from le

相关标签:
1条回答
  • 2020-12-03 02:14

    Let's say your file is called 'data.csv' and it contains:

    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
    

    Note var1 and var3 have 6 values but var2 has only 5. So, the idea is to read the data, transpose it and then use 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)
    
    }
    

    Then, you can do:

    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
    
    0 讨论(0)
提交回复
热议问题