如何在 R 或 matlab 中读取稀疏关联矩阵?

发布于 2024-10-25 18:04:04 字数 185 浏览 3 评论 0原文

我有一个不等行的文本文件 意味着每行都有不同数量的元素,

例如
数据1 7 6 6 5 6 7 8 9
数据2 2 6 7
data3 93

每行都是某种数据集合。我需要使用每一行作为数据集合,

如何将其读入 R 或 matlab 中的数据框或数据矩阵? 谢谢你!

i have a text file of unequal rows
meaning each rows have different number of elements

something like

data1 7 6 6 5 6 7 8 9

data2 2 6 7

data3 93

each row is data collection of some kind. and i need to use each row as a collection of data

how do i read this into a dataframe or data matrix in R or matlab?
thank you!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

岁吢 2024-11-01 18:04:04

在 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)

In R, I use this function for data that is ordered in rows of different length in a text file, presuming your example is a true representation of the text file you have. It returns a list, not a dataframe or a matrix. Unless the columns in your file are linked in some way, using a matrix or a dataframe doesn't make sense. A list gives you the right representation : a group of vectors, each representing a row, and named after the first element of the row.

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
}

This returns a named list where the name of each element is the first item in the row, and the elements represent the lines of numbers. If your data is not numeric, you can adapt the function as needed.

zz <- textConnection("data1 12 33 12
data2 11
data3 33 44 25 51 42 11")
readRows(zz)
close(zz)
少跟Wǒ拽 2024-11-01 18:04:04

将数据保存为名为 dat.txt 的文本文件。然后,使用:

dat <- read.table('dat.txt', fill=T)

Save your data as a text file named dat.txt. Then, use:

dat <- read.table('dat.txt', fill=T)
哎呦我呸! 2024-11-01 18:04:04

以下是在 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};   

您可以将其转换为结构,但请确保第一列中的所有名称都是唯一的,否则您将收到错误。

try
    datastruct = cell2struct(numdata,names);
catch ME
    error('Cannot create data structure: %s', ME.message)
end

Here is how you could read this data in 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};   

You can convert it to a structure, but make sure all names in the 1st column are unique or you will get an error.

try
    datastruct = cell2struct(numdata,names);
catch ME
    error('Cannot create data structure: %s', ME.message)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文