How to delete 'NA' columns from a text file?

2 visualizaciones (últimos 30 días)
chocho
chocho el 3 de Abr. de 2018
Comentada: chocho el 3 de Abr. de 2018
Hi guys, I have a text file which has 7 rows and 499 columns and in some columns, there are 'NA'
How can i delete them?
Example.txt:
NA T2b t1c t3b
60 79 78 50
7 7 9 7
t2c t3a t2c t3b
4 5 3 NA
0.1 0.1 0.18 0.1
4 4 5 3
  2 comentarios
Akira Agata
Akira Agata el 3 de Abr. de 2018
You mean, you want to replace 'NA' with some value, such as 0? or you want to delete row or column with 'NA'?
chocho
chocho el 3 de Abr. de 2018
I want to delete the whole columns which contain 'NA' like in the attached example column 1 and 4 should be deleted completely

Iniciar sesión para comentar.

Respuesta aceptada

Stephen23
Stephen23 el 3 de Abr. de 2018
Editada: Stephen23 el 3 de Abr. de 2018
This is easy with textscan, strcmp, and some indexing:
opt = {'MultipleDelimsAsOne',true};
fmt = repmat('%s',1,4); % define how many columns!
[fid,msg] = fopen('test.txt','rt');
assert(fid>=3,msg)
C = textscan(fid,fmt,opt{:});
fclose(fid);
C = [C{:}];
idx = any(strcmp(C,'NA'),1);
D = C(:,~idx);
which generates this matrix:
D =
T2b t1c
79 78
7 9
t3a t2c
5 3
0.1 0.18
4 5
The test file is attached to this answer. It is also easy to write this to a new file:
tmp = D';
len = max(cellfun('length',D(:)));
fmt = sprintf('%%-%ds',len+1);
fmt = [repmat(fmt,1,size(D,2)),'\n'];
[fid,msg] = fopen('test_new.txt','wt');
assert(fid>=3,msg)
fprintf(fid,fmt,tmp{:});
fclose(fid);
this generates a new file which looks like this:
T2b t1c
79 78
7 9
t3a t2c
5 3
0.1 0.18
4 5
  1 comentario
chocho
chocho el 3 de Abr. de 2018
Great! exactly, what i want.
@Stephen Cobeldick Thanks a lot friend

Iniciar sesión para comentar.

Más respuestas (1)

KSSV
KSSV el 3 de Abr. de 2018
fid = fopen('data.txt','rt') ;
S = textscan(fid,'%s','delimiter','\n') ;
fclose(fid) ;
S = S{1} ;
idx = strfind(S, 'NA');
idx = find((cellfun('isempty', idx)));
S = S(idx)
  1 comentario
chocho
chocho el 3 de Abr. de 2018
@KSSV, I have tried your code, it deleted the rows but I want to delete the columns that have NA and not the rows

Iniciar sesión para comentar.

Categorías

Más información sobre Text Data Preparation en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by