Как вы читаете в разреженной матрице заболеваемости в R или Matlab? - PullRequest
1 голос
/ 23 марта 2011

у меня есть текстовый файл с неравными строками то есть в каждой строке разное количество элементов

что-то вроде
data1 7 6 6 5 6 7 8 9
data2 2 6 7
data3 93

каждая строка - это какой-то сбор данных. и мне нужно использовать каждую строку в качестве набора данных

как мне прочитать это в фрейм данных или матрицу данных в R или matlab? спасибо!

Ответы [ 3 ]

2 голосов
/ 23 марта 2011

В R я использую эту функцию для данных, упорядоченных по строкам разной длины в текстовом файле, предполагая, что ваш пример является истинным представлением имеющегося у вас текстового файла.Возвращает список, а не фрейм данных или матрицу.Если столбцы в вашем файле не связаны каким-либо образом, использование матрицы или кадра данных не имеет смысла.Список дает правильное представление: группа векторов, каждый из которых представляет строку и назван в честь первого элемента строки.

readRows <- function(file,sep="\n",split=" ",...){
    tt <- strsplit(
              scan(file,what="list",sep=sep,...),
              split=split
    )
    out <- lapply(tt,function(i) as.numeric(i[-1]))
    names(out) <- sapply(tt,`[`,1)
    out
}

Возвращает именованный список, в котором имя каждого элемента являетсяпервый элемент в строке, а элементы представляют собой строки чисел.Если ваши данные не являются числовыми, вы можете адаптировать эту функцию по мере необходимости.

zz <- textConnection("data1 12 33 12
data2 11
data3 33 44 25 51 42 11")
readRows(zz)
close(zz)
1 голос
/ 23 марта 2011

Сохраните ваши данные как текстовый файл с именем dat.txt.Затем используйте:

dat <- read.table('dat.txt', fill=T)
0 голосов
/ 23 марта 2011

Вот как вы можете прочитать эти данные в MATLAB.

filename = 'input.txt';
fid = fopen(filename,'r');
rawdata = textscan(fid,'%s %[^\n]','HeaderLines',1);
fclose(fid);
numdata = cellfun(@str2num, rawdata{2},'uniformoutput',0);
names = rawdata{1};   

Вы можете преобразовать их в структуру, но убедитесь, что все имена в 1-м столбце уникальны, иначе вы получите ошибку.

try
    datastruct = cell2struct(numdata,names);
catch ME
    error('Cannot create data structure: %s', ME.message)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...