3

我在从 Matlab 的数据库中读取数据时遇到了一些问题。我用来下载数据的 url 链接给出了一个以分号分隔的文本文件,我需要 Matlab 来识别这些数据并以某种struct格式(因为数据具有不同的类)进行相应的排列。我已经使用urlread并且可以成功下载数据,唯一的问题是我将所有数据作为字符串获取到一个单元格中,我需要将这些数据作为表格获取并且组织良好。

基本上我想知道是否可以像read.csvR 中的函数一样将数据从 url 加载到 Matlab 中,你只需将 url 放在文件名应该去的地方并定义数据如何分隔和中提琴,你让您data.frame的所有数据按应有的方式完美组织。

我想有办法在使用后解释字符串urlread并将其以某种方式转换为有组织的struct变量,但必须有一种方法可以像 R 那样直接从 url 读取它。

4

2 回答 2

5

这是一段代码,它将csv从 web ( urlread) 读取数据,textscan用于扫描数据并将其格式化为单元格(允许字符串和标量),然后将单元格转换为带有cell2struct. 创建的结构保留textscan格式。

请注意,您必须定义textscan格式和cell2struct输入以适合您的数据。

block = urlread('http://hci.stanford.edu/jheer/workshop/data/florida2000/Florida2000.csv');
C = textscan(block,'%s%s%f%s%f','HeaderLines',1,'EndOfLine','\n');
S = cell2struct(C,{'county','technology','columns','category','ballots'},2)

这是佛罗里达州 2000 年总统选举结果(.csv938 个数据点)

county,technology,columns,category,ballots
Alachua,Optical,1,under,217
Alachua,Optical,1,over,105
Alachua,Optical,1,Bush,34124
Alachua,Optical,1,Gore,47365
Alachua,Optical,1,Browne,658
Alachua,Optical,1,Nader,3226
Alachua,Optical,1,Harris,6
...

这将产生

S = 

    county: {938x1 cell}    %string
technology: {938x1 cell}    %string
   columns: [938x1 double]  %double
  category: {938x1 cell}    %string
   ballots: [938x1 double]  %double

编辑

对于双引号文本,您可以像这样使用%q而不是%s调用textscanFormatSpec 选项

C = textscan(fileID,'%q%f');
于 2013-09-03T12:53:05.557 回答
0

查看一个名为dlmread. 这将允许您输入一串数据,告诉它分隔符是什么,它应该会输出您需要的内容。

dlmread

results = dlmread('http://someurl.com/somefile.txt',';')
于 2013-09-03T12:39:24.377 回答