【发布时间】:2016-06-10 19:47:24
【问题描述】:
我正在使用 Matlab2015b。我想将一个简单的 csv 文件读取到一个表中,并将其字符串值更改为相应的数值。
我有以下示例数据。
Var1, VarClass
1 , attack
2 , normal
1, attack
我想将此字符串值更改为数字。例如攻击 = 1,正常 = -1。
我的第一次尝试。
T = readtable('example_data.csv', 'Delimiter',',','FileType','text','TreatAsEmpty',{'?'});
rows_attack = strcmp(T(:,2),'attack');
T(rows_attack,2) = 1
rows_normal = strcmp(T(:,2),'normal');
T(rows_normal,2) = -1
我收到以下错误:
'cell' 类型的输入参数的未定义函数 'eq'。
什么?哪个未定义函数?什么是'eq'?
嗯。在阅读了一些关于表格的内容后,我了解到所谓的更高级别的 matlab 不会覆盖'=='。那是'eq',意思是平等。但是错误消息肯定没有信息。
然后我的第二次尝试。
T = readtable('example_data.csv', 'Delimiter',',','FileType','text','TreatAsEmpty',{'?'});
rows_attack = strcmp(T.VarClass,'attack');
T(rows_attack,2) = 1
这一次,我明白了
分配到表格的右侧必须是另一个表格或单元格 数组。
嗯。好的。它想要桌子。我给它一个。
T = readtable('example_data.csv', 'Delimiter',',','FileType','text','TreatAsEmpty',{'?'});
rows_attack = strcmp(T.VarClass,'attack');
rows_attack_size = sum(rows_attack);
data_to_fill = ones(rows_attack_size,1) ;
T(rows_attack,2) = array2table(data_to_fill);
嗯。这次的错误信息是。
无法从 double 转换为单元格。
我认为这个 matlab 表类似于 R data-frame 或 python pandas DataFrame。好吧,当然不是。有人可以指导我如何解决这个问题吗?
【问题讨论】:
-
这个错误问题在现已关闭的 Abandon Matlab 博客中得到了很好的解决。 Mathworks 不知何故喜欢静默异常,直到它在更远的地方爆炸。
-
好吧。 Matlab 在索引单元格时使用 { } 符号,对矩阵(即双精度数)使用 [ ]。所以 T{rows_attack,2} = -1 应该这样做。
-
它不起作用。 T{rows_attack,2} = 1;无法从 double 转换为单元格。
-
它需要一个单元格,所以 T.VarClass(rows_attack) = {1} 应该可以工作
-
@Ondiz
Conversion to cell from double is not possible.
标签: matlab matlab-table