Подтвердить что ты не робот

Чтение CSV файла, организованного по горизонтали

В R есть функция типа read.csv, которая читается в файлах, где заголовки слева (или справа), в отличие от верхней части, и данные организованы слева направо?

Таким образом, данные будут выглядеть так:

var1,1,2,3,4,5

Глядя на документацию для read.table и read.csv, ничего не появляется. Лучший вариант, который я вижу при использовании этих функций, - это использовать read.table, а затем построить другую таблицу, столбцы которой являются строками исходных данных и т.д.

4b9b3361

Ответ 1

Скажем, ваш файл называется 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

Примечание var1 и var3 имеют 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