Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在MATLAB中导入和修改日期数据

我有一个.csv文件,其中记录以以下形式编写:

2010-04-20 15:15:00,"8.9915176259e+00","8.8562623697e+00" 2010-04-20 15:30:00,"8.5718021723e+00","8.6633827160e+00" 2010-04-20 15:45:00,"8.4484844117e+00","8.4336586330e+00" 2010-04-20 16:00:00,"1.1106980342e+01","8.4333062208e+00" 2010-04-20 16:15:00,"9.0643470589e+00","8.6885660103e+00" 2010-04-20 16:30:00,"8.2133517943e+00","8.2677822671e+00" 2010-04-20 16:45:00,"8.2499419380e+00","8.1523501983e+00" 2010-04-20 17:00:00,"8.2948492278e+00","8.2884797924e+00" 根据这些数据,我想进行聚类-我想添加一列,其中带有表示小时的数字-因此,在第一行的情况下,必须在新行中添加值15。

第一个问题是调用函数

[numData, textData, rawData] = xlsread('testData.csv') 创建一个空矩阵numData以及一列textData和rawData结构。

是否可以创建任何模板来识别上述数据中的yyyy,MM,dd,hh,mm,ss值?

我基本上想对这些数据进行处理的是按小时对值进行分类,因此请从输入示例行中进行:

2010-04-20 15:15:00,"8.9915176259e+00","8.8562623697e+00" 更新1:在Matlab中,以上行被识别为字符串:
'2010-04-26 13:00:00,“ 1.0428104753e + 00”,“ 2.3456394130e + 00”'

我希望这是输出:

15, 8.9915176259e+00, 8.8562623697e+00 更新1:必须解析一个字符串

有谁知道如何解析字符串并从中获取时间戳('2010-04-20 15:15:00'),value1(1.0428104753e + 00)和value2(2.3456394130e + 00)作为单独的值?



回答:

如果我对您的样本文件数据使用XLSREAD ,那么我将得到与yuk一样的正确输出。 XLSREAD文档中的以下语句可能解释了您遇到的问题:
如果您的系统没有安装用于Windows的Excel,或者MATLAB无法访问COM服务器,则xlsread在基本模式下运行。在这种模式下, xlsread仅读取XLS文件。

另外,我还可以使用TEXTSCAN读取示例数据文件:

>> fid = fopen('testData.csv','r'); %# Open the file >> data = textscan(fid,'%s %s %s','Delimiter',',',... %# Read the data 'CollectOutput',true); >> fclose(fid); %# Close the file >> data = strrep(data{1},'"','') %# Format the data and remove '"' data = '2010-04-20 15:15:00' '8.9915176259e+00' '8.8562623697e+00' '2010-04-20 15:30:00' '8.5718021723e+00' '8.6633827160e+00' '2010-04-20 15:45:00' '8.4484844117e+00' '8.4336586330e+00' '2010-04-20 16:00:00' '1.1106980342e+01' '8.4333062208e+00' '2010-04-20 16:15:00' '9.0643470589e+00' '8.6885660103e+00' '2010-04-20 16:30:00' '8.2133517943e+00' '8.2677822671e+00' '2010-04-20 16:45:00' '8.2499419380e+00' '8.1523501983e+00' '2010-04-20 17:00:00' '8.2948492278e+00' '8.2884797924e+00' 现在,您可以使用DATEVECCELLFUNSTR2NUM将单元格数组data的字符串格式化为数值矩阵:

>> dateVectors = datevec(data(:,1)); %# Format the date string >> newData = [dateVectors(:,4) cellfun(@str2num,(data(:,2:3)))] newData = %# A numeric matrix 15.0000 8.9915 8.8563 15.0000 8.5718 8.6634 15.0000 8.4485 8.4337 16.0000 11.1070 8.4333 16.0000 9.0643 8.6886 16.0000 8.2134 8.2678 16.0000 8.2499 8.1524 17.0000 8.2948 8.2885

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 21:15


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.