How to add a new column in a table and then write on a file only some columns?

7 views (last 30 days)
Hi guys,
I've a simple code that reads data from a .csv file (atteched below). I have 56 rows, the first one is the header row and the the others contain data.
I want to create a new column contaning integer numbers that count the number of rows (so a column that contains: 1,2,3,4,..,55) and I want to call this column "index", then I want to put this one as first column of my table and I want to write it on a new .csv file by excluding the row called "name". Can you help me?
Here my code:
clear all; close all; clc;
% Definition of path names and file names
file_data_ast = 'NEOs_asteroids.csv';
% Setting of data import options
opt = detectImportOptions(file_data_ast);
opt = setvaropts(opt,'Type','string');
% Import table of text data
Tab_ast_str = readtable(file_data_ast, opt);
disp(['Asteroids (NEOs) no. : ',num2str(height(Tab_ast_str))]);
Asteroids (NEOs) no. : 28071
Here what I want to obtain:

Accepted Answer

Turlough Hughes
Turlough Hughes on 8 Feb 2022
Edited: Turlough Hughes on 8 Feb 2022
I like to use addvars and removevars for this:
T = readtable('https://uk.mathworks.com/matlabcentral/answers/uploaded_files/887485/NEOs_asteroids.csv');
T = removevars(T,'name');
T = addvars(T,(1:height(T)).','Before','pdes','NewVariableNames','index');
head(T)
ans = 8×11 table
index pdes epoch a e i om w ma q ad _____ ____ __________ ______ _______ ______ ______ ______ _______ _______ ______ 1 433 2.4596e+06 1.4583 0.22273 10.828 304.3 178.9 246.9 1.1335 1.7831 2 719 2.4596e+06 2.6375 0.54696 11.575 183.86 156.23 278.2 1.1949 4.0801 3 887 2.4596e+06 2.4732 0.57049 9.3941 110.43 350.49 86.607 1.0623 3.8841 4 1036 2.4596e+06 2.6658 0.53312 26.678 215.52 132.43 140.65 1.2446 4.0871 5 1221 2.4596e+06 1.9187 0.43584 11.883 171.32 26.644 261.04 1.0825 2.755 6 1566 2.4596e+06 1.0781 0.82694 22.804 87.962 31.438 0.33029 0.18657 1.9696 7 1580 2.4596e+06 2.1973 0.48716 52.079 62.292 159.51 16.629 1.1269 3.2677 8 1620 2.4596e+06 1.2457 0.33536 13.338 337.18 276.95 300.49 0.82793 1.6634
To save it you can use:
writetable(T,'myNewTable.csv')

More Answers (1)

Enrico Gambini
Enrico Gambini on 8 Feb 2022
Edited: Enrico Gambini on 8 Feb 2022
Hello Giuseppe.
To create your column of indexes you can do the following:
idx=[1:height(Tab_ast_str)];
then
Tab_ast_str.indexes=idx; %add the new column called "indexes" at the end of the table
Tab_ast_str=movevars(Tab_ast_str,'indexes','Before','pdes');%move your column at first position
Tab_ast_str=removevars(Tab_ast_str,'name'); %remove the column called "name"
writetable(Tab_ast_str,'new_table.csv'); %export the new table
Hope it helps!

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!