Я использую Matlab2015b. И я хотел бы прочитать простой файл csv в таблице и изменить его строковые значения на соответствующие числовые значения.Изменение строковых значений на число в таблице Matlab
Имею следующие данные примера.
Var1, VarClass
1 , attack
2 , normal
1, attack
Я хотел бы изменить эти значения строк на число. например attack = 1, normal = -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
Я получаю следующее сообщение об ошибке:
Неопределенная функция 'эк' для входных аргументов типа 'клетка'.
Что? Какая неопределенная функция? Что такое «экв»?
Ну. После прочтения некоторых о таблице я понял, что предположительно более высокий уровень matlab не переопределяет '=='. Это «экв», что означает равенство. Однако сообщение об ошибке не является информативным.
Тогда моя вторая попытка.
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);
Хорошо. Это сообщение об ошибке времени.
Преобразование в ячейку из двойного не возможно.
Я думал, что эта таблица Matlab похожа на R-кадр данных или python pandas DataFrame. Ну, конечно, это не так. Может ли кто-нибудь помочь мне решить эту проблему?
Эта ошибка была рассмотрена в закрытом блоге * Abandon Matlab * очень красиво. Mathworks каким-то образом любит молчащие исключения, пока он не разрастается где-то дальше по линии. – percusse
хорошо. Matlab использует {} символы при индексировании ячеек и [] для матриц (т. Е. Удваивает). Поэтому T {rows_attack, 2} = -1 должен это сделать. – GameOfThrows
Не работает. T {rows_attack, 2} = 1; Преобразование в ячейку с двойным невозможно. –