2

我的数据格式如下:

days of week      date        time(hrs)        visitors
mon            jan 2 2010     900               501 
mon            jan 2 2010    1000               449
mon            jan 2 2010    1100               612

全年的每一天也是如此。我需要创建一个星期几的矩阵,如下所示:

A=[
    mon
    mon
    mon
]
4

5 回答 5

1

以下是我如何读取制表符分隔值并解析日期:

%# read and parse file
fid = fopen('data.csv','rt');
C = textscan(fid, '%s %s %s %d', 'Delimiter','\t', 'HeaderLines',1, ...
    'MultipleDelimsAsOne',true, 'CollectOutput',false);
fclose(fid);

%# get date and number of visitors
dt = datenum(strcat(C{2}, {' '}, C{3}), 'mmm dd yyyy HHMM');
visitors = C{4};

%# plot
plot(dt,visitors)
datetick('x')
xlabel('time of day'), ylabel('visitors')

在此处输入图像描述

至于星期几列,你可以得到它:

>> C{1}                        %# first column from file
ans = 
    'mon'
    'mon'
    'mon'

>> cellstr(datestr(dt,'ddd'))  %# actual day of week from parsed dates
ans = 
    'Sat'
    'Sat'
    'Sat'

这会产生不同的日期(要么您发布的数据只是虚构的,要么您在生成这些日期的部分中存在错误!)

于 2011-07-20T13:16:22.077 回答
0

如果您刚开始使用(最新版本的)matlab,最简单的方法是使用“导入向导”。

几个简单的步骤:

  1. 浏览到您的文件并右键单击它
  2. 选择要导入的选项
  3. 选择将事物存储为cell array(向量或矩阵不起作用)的选项。
  4. 点击导入

或者,您可以单击下一步导入并选择您要为此过程生成代码。但是,这可能有点冗长。如果你只需要做一次,我会推荐这种方法。

于 2013-10-11T12:26:36.890 回答
0

你可以从 File Exchange下载我提交的csvimport 。假设您的数据是制表符分隔的,您可以使用以下方法读取它:

[days datecol timecol visitors] = csvimport( 'file.txt', 'delimiter', '\t', ...
       'columns', {'days of week', 'date', 'time(hrs)', 'visitors'} );

前 2 个输出参数将是字符串元胞数组,而后 2 个将是双精度矩阵。

于 2011-07-20T17:36:15.473 回答
0

上一个问题中得到提示,

fid = fopen('filename.txt');
% Skip a line for the header
s = fgetl(fid);
% Read the rest into data
data = textscan(fid, '%s %s %d %d %d %d');
% Close the file
fclose(fid);

星期几在 的第一个单元格中data

于 2011-07-20T10:39:57.927 回答
-1

你可以尝试使用dlmread. 它可以采用任何 ASCII 分隔符。我认为它可能适合您的要求。见这里

于 2011-07-21T13:40:06.943 回答