Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab中直接从url读取csv数据_R_Matlab_Csv_Import - Fatal编程技术网

在Matlab中直接从url读取csv数据

在Matlab中直接从url读取csv数据,r,matlab,csv,import,R,Matlab,Csv,Import,我在从Matlab中的数据库读取数据时遇到一些问题。我用来下载数据的url链接给出了一个分号分隔的文本文件,我需要Matlab来识别这些数据,并以struct格式对其进行相应的排列(因为数据有不同的类)。 我已经使用了urlread,可以成功下载数据,唯一的问题是我将所有数据作为一个单元格中的字符串获取,我需要将这些数据作为一个表并进行良好的组织 基本上,我想知道是否有可能像R中的read.csv函数那样将url中的数据加载到Matlab中,您只需将url放在文件名应该放在的位置,并定义数据的分

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

基本上,我想知道是否有可能像R中的
read.csv
函数那样将url中的数据加载到Matlab中,您只需将url放在文件名应该放在的位置,并定义数据的分隔方式,然后viola,您就可以得到
data.frame
,所有数据都按应有的方式完美组织


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

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


下面是一段代码,它将从web(
urlread
)读取
csv
数据,使用
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年总统选举结果(
.csv
,938个数据点)

这将产生

S = 

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

编辑

对于双引号文本,您可以在调用
textscan
()时使用
%q
而不是
%s
,就像这样

C = textscan(fileID,'%q%f');

dlmread仅适用于数字数据,它创建一个矩阵。我需要创建一个结构,因为url中的数据具有不同的classes@RabidHealer最初的海报没有真正说明数据的类型,所以我只是假设它是数字。我添加了一句话解释数据具有不同的类。我尝试在MATLAB R2015b中使用URL调用dlmread(),但它返回了一个I/O错误。我相信它只能从本地文件系统中读取,而不能从HTTP中读取。@Nayuki我不能说问题出在哪里,除非详细说明错误说明了什么,但是这个答案是在2013年写的,所以MATLAB可能在我写答案到他们发布R2015这一解决方案起作用之间发生了一些变化,我必须为每个列定义数据类和名称,这样它就不会像在R中那样简单了。但是它做了我想要的事情。无论如何,对mathworks来说,一个好的建议是在csvread函数中包含与URL的兼容性。谢谢你的帮助@RabidHealer这将涉及太多的工作(支持所有常见的协议,如HTTP、FTP、TFTP等),因此通常用自己的工作范围限制每个命令/功能/工具更有意义。如果要读取远程文件,请使用适当的工具(例如
urlread
)获取它,然后使用另一个工具对其进行解析。我在Octave 3.8.2中尝试了这一方法,但它不起作用,因为它忽略了“headerline”。Octave输出“警告:文本扫描:读取字符串时忽略标题行”,并实际尝试解析标题。这是Matlab中不存在的倍频程怪癖吗?有人知道如何在不读取文件的情况下在八度音阶下工作吗?在标准csv文件中使用双引号怎么样?此答案不完整。@hyprfrcb请查看编辑<代码>文本扫描有一个用于读取引用文本的本机选项。
S = 

    county: {938x1 cell}    %string
technology: {938x1 cell}    %string
   columns: [938x1 double]  %double
  category: {938x1 cell}    %string
   ballots: [938x1 double]  %double
C = textscan(fileID,'%q%f');