使用标题读取外部文本文件

时间:2016-09-13 11:14:54

标签: matlab sum octave names

我正在尝试将外部文本数据文件读入Octave。该文件包含两列数字,每列都有一个变量名称作为标题。以下是名为'simple_octave_dataset_with_names.txt'的文件内容:

     mycol1     mycol2
   0.632736  -0.097964
   0.410370   0.196382
   0.426642   1.011637
   0.135770  -0.112614
   0.034180  -0.874835

如果没有列名,我可以使用Octave GUI中的复制和粘贴来读取文件:

chdir 'C:/Users/general1/Documents/simple Octave programs/'

myData = [
   0.632736  -0.097964
   0.410370   0.196382
   0.426642   1.011637
   0.135770  -0.112614
   0.034180  -0.874835
]

sum(myData)
#ans =
#
#   1.63970   0.12261

如果没有列名,我可以像这样读取外部文件:

myexternalData = load('simple_octave_dataset.txt')
#myexternalData =
#
#   0.632736  -0.097964
#   0.410370   0.196382
#   0.426642   1.011637
#   0.135770  -0.112614
#   0.034180  -0.874835

sum(myexternalData)
#ans =
#
#   1.63970   0.12261

如果有列名,我可以像这样读取外部数据文件:

myexternalDatawithnames = importdata('simple_octave_dataset_with_names.txt', delimiterIn = ' ', headerlinesIn = 1)

然而,这不起作用:

sum(myexternalDatawithnames)
# error: sum: wrong type argument 'scalar struct'

如果有列名,我如何将两列相加? 这是解决方案我发现了这个问题:

sum(myexternalDatawithnames.data)
#ans =
#
#   1.63970   0.12261

如何按列名称引用两列时对两列进行求和?

如何在按名称引用第一列时,只对第一列求和?

如何在使用load('simple_octave_dataset.txt')时添加列名,然后在按名称引用第二列时对其进行求和?

如何使用带有和不带列名的C语法读取文件?

感谢您对这些问题的任何帮助?我知道他们非常基本。我是一名R用户,正在学习Octave并且已经尝试自己解决这个问题很长一段时间了。

2 个答案:

答案 0 :(得分:1)

可以编写简单的脚本,将文件中的数据分配给名称来自第1行文件的变量。使用名称创建脚本 - readfile.m

A=importdata(filename , ' ',1);
for k = 1 : length(A.colheaders)
%  A.colheaders{1,k} - name of column #k
%  A.data(:,k) -  data of column #k
  eval([A.colheaders{1,k} ' = A.data(:,' int2str(k) ');']);
end
clear A; 

对于脚本的演示工作,创建名称为' simple_octave_dataset_with_names.txt 的文本文件':

     mycol1     mycol2
   0.632736  -0.097964
   0.410370   0.196382
   0.426642   1.011637
   0.135770  -0.112614
   0.034180  -0.874835

输入Matlab / Octave:

>> filename='simple_octave_dataset_with_names.txt';
>> readfile
>> mycol1, mycol2
mycol1 =

   0.632736
   0.410370
   0.426642
   0.135770
   0.034180

mycol2 =

  -0.097964
   0.196382
   1.011637
  -0.112614
  -0.874835
>> sum(mycol1)
ans =  1.6397
>> sum(mycol2)
ans =  0.12261

答案 1 :(得分:0)

如果我知道变量名称,我可以手动分配它们:

[mycol1,mycol2] = textread ('simple_octave_dataset_with_names.txt', '%f %f', 'headerlines', 1, 'delimiter', ' ')

sum(mycol1)
#ans =  1.6397

sum(mycol2)
#ans =  0.12261

我不希望手动分配变量名,而是从importdata colheaders单元格中提取它们。如果我弄清楚如何做到这一点,我会在这里发布解决方案。