Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
高级会员
注册日期: 2019-11-21
帖子: 3,006
声望力: 66 ![]() |
![]()
我有一个.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' 现在,您可以使用DATEVEC , CELLFUN和STR2NUM将单元格数组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 更多&回答... |
![]() |
![]() |