排序的日期时间。

3视图(30天)
HAOLUN田
HAOLUN田 2019年6月25日
编辑: 剪秋罗属植物龙 2019年6月27日
你好,
我有一个n * 3的数据。(整个美国股票数据)每个cloume日期是:股票id、日期、价格。
日期为每个股票在第二cloume重复id。
T1 P1a
一个T2 P2a
一个T3 P3a
一个T4 P4a
B T1 P1a
B T2 P2b
B T3 P3b
B T4 P4b
.... .... ....
我尽量安排数据,让第一cloume日期,行是股票id调情。
ID =独特(数据(:1))';
日期=独特(数据(:,2))
然后我没有理想如何编码。
需要的数据
A B C ...............
T1 P1a P1b P1c ...............
T2 P2a P2b P2c
T3 P3a P3b P3c
T4 P4a P4b P4c
我没有编程经验,尝试学习matlab。
谢谢你的时间
2的评论
HAOLUN田
HAOLUN田 2019年6月26日
是我在wrd下载csv数据。

登录置评。

接受的答案

耻辱Parmar
耻辱Parmar 2019年6月26日
编辑:耻辱Parmar 2019年6月27日
你好Haolun,这是逻辑. .
% Assumming输入数据是这样. .
%第一列是“ID”,第二列是“约会”,第三列是“价格”
inputData = [
11 21062019 1000
11 22062019 1500
11 23062019 2000
11 24062019 2500
22 21062019 3000
22 22062019 3500
22 23062019 4000
22 24062019 4500
33 21062019 5000
33 22062019 5500
33 23062019 6000
33 24062019 6500];
id =独特(inputData (: 1));
日期=独特(inputData (:, 2));
totalIDs =长度(IDs);
totalDates =长度(日期);
%逻辑创建输出数据
%第一项的输出将是空的
outputData {1} = [];
%这个FOR循环是第一行(行id)
count1 = 1: totalIDs
outputData {1, count1 + 1} = id (count1);
结束
%这个FOR循环是第一列(列的日期)
是从= 1:totalDates
outputData{是从+ 1,1}=日期(是从);
结束
%这个For循环的中间值
count1 = 1: totalIDs
是从= 1:totalDates
ID_val = id (count1);
Date_val =日期(是从);
ID_Column_Indices =找到(ismember (inputData (: 1), ID_val));
Date_Column_Indices =找到(ismember (inputData (:, 2), Date_val));
require_price_val = [];
i = 1:长度(ID_Column_Indices)
j = 1:长度(Date_Column_Indices)
如果ID_Column_Indices (i) = = Date_Column_Indices (j)
指数= ID_Column_Indices(我);
require_price_val = inputData(指数(3);
结束
结束
结束
outputData{是从+ 1,count1 + 1} = require_price_val;
结束
结束
inputData%显示输入数据
outputData%显示输出数据
%输出数据将显示. .
outputData =
[][11][22][33]
[21062019][1000][3000][5000]
[22062019][1500][3500][5500]
[23062019][2000][4000][6000]
[24062019][2500][4500][6500]
请参阅附加脚本并运行它,看看结果. .Thanksss……:)
4评论
HAOLUN田
HAOLUN田 2019年6月27日
你好,羞愧,
我发现是我的错误。代码是正确的,我试着很小的一部分,它可以运行我的数据。(只有第一个5000行)。
我的2 gb的数据总量约为400 mb。几种不同的数据。我想我需要等待更多的时间得到结果。

登录置评。

更多的答案(2)

史蒂文的主
史蒂文的主 2019年6月26日
如果你存储你的数据 时间表 数组,你描述的操作 unstack
第一个示例文档页面看起来有点类似于您的应用程序,包括创建的步骤 从数据,所以你可以适应适应您的需要。
一旦你的数据转换为 时间表 很多其他的功能 利用表格的数据。你能说出你的变量 例如,为A、B或C和索引的 使用这些变量名,而不是使用ID代码11日,22日,或33耻辱Parmar一样

剪秋罗属植物龙
剪秋罗属植物龙 2019年6月27日
编辑:剪秋罗属植物龙 2019年6月27日
如上Steve建议,应该将CSV导入时间表和unstack得到你想要的。我也提到了 detectImportOptions 函数,它给你许多旋钮来调整你想如何导入(没有花时间来读取整个文件):
假设羞愧的数据格式,你CSV看起来像这样:
data.csv:
STOCK1210620191000年
STOCK1220620191500年
STOCK1230620192000年
STOCK1240620192500年
STOCK1210620193000年
STOCK2220620193500年
STOCK2230620194000年
STOCK2240620194500年
STOCK3210620195000年
STOCK3220620195500年
STOCK3230620196000年
STOCK3240620196500年
这是让你的数据到MATLAB的步骤,在你渴望的布局:
> >选择= detectImportOptions (“data.csv”);
%没有必要(自动检测)如果你的时间戳是更常见的时间格式
%。“21-06-2019”而不是“21062019”
> > opt.VariableTypes {2} =“datetime”;
> > opt.VariableOptions (2)。InputFormat =“ddMMyyyy”;
%给你时间戳更友好格式和变量有意义的名称
> > opt.VariableOptions (2)。DatetimeFormat =“dd-MMM-yyyy”;
> > opt.VariableNames = [“股票”“时间”“数据”];
%现在写入数据
> > tt = readtimetable (“data.csv”选择)
tt =
12×2的时间表
时间股票行情自动收录器数据
_______________________
截止2019年6月21日“STOCK1”1000年
截止2019年6月22日“STOCK1”1500年
截止2019年6月23日“STOCK1”2000年
截止2019年6月24日“STOCK1”2500年
截止2019年6月21日“STOCK2”3000年
截止2019年6月22日“STOCK2”3500年
截止2019年6月23日“STOCK2”4000年
截止2019年6月24日“STOCK2”4500年
截止2019年6月21日“STOCK3”5000年
截止2019年6月22日“STOCK3”5500年
截止2019年6月23日“STOCK3”6000年
截止2019年6月24日“STOCK3”6500年
% Unstack所需的布局
> > tt = unstack (tt,“数据”,“股票”)
tt =
4×3的时间表
时间STOCK1STOCK2STOCK3
_____________________________
21 - 6月2019 1000 3000 5000
22日- 5500年6月- 2019年1500年3500年
23日- 6000年6月- 2019年2000年4000年
24 - 6月2019 2500 4500 6500

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!