MATLAB: How to apply conditional statements so as to select certain rows or columns on a given dataset.

conditional statementsdataset

How do I apply conditional statements so as to select certain rows or columns on a given dataset (like the one below)? For example, I would like to (1) display records with r only , (2) count records with + only .
Please note that the example of the data to be analyzed is given below. The data is separated by space. The data has 12 columns whose headings are; Event, time, from_Node, to_Node, Packet_Type, Packet_Size, Flags, Fid, Source_Address, Destination_Address, Sequence_Number and Packet_Id .
For example, + 0.155355 1 3 tcp 1500 ——- 0 0.0 3.0 2 3;
+ is an event,
0.155355 is time in secs,
1 is from_Node,
3 is to_Node,
tcp is Packet_Type, 1500 is Packet_Size,
------- are Flags,
0 is Fid,
0.0 is Source_Address,
3.0 is Destination_Address,
2 is Sequence_Number and
3 is Packet_Id.
_ _This is the data _
+ 0.155355 1 3 tcp 1500 ——- 0 0.0 3.0 2 3
– 0.160955 1 3 tcp 1500 ——- 0 0.0 3.0 2 3
r 0.170955 1 3 tcp 1500 ——- 0 0.0 3.0 1 2
r 0.178955 1 3 tcp 1500 ——- 0 0.0 3.0 2 3
+ 0.203632 1 3 tcp 1500 ——- 0 0.0 3.0 3 6
– 0.203632 1 3 tcp 1500 ——- 0 0.0 3.0 3 6
+ 0.206032 1 3 tcp 1500 ——- 0 0.0 3.0 4 7
+ 0.211632 1 3 tcp 1500 ——- 0 0.0 3.0 5 8
Thank you

Best Answer

  • Here is another approach
    content = fileread( 'myData.txt' ) ;
    nPlus = sum( content == '+' ) ;
    rRows = regexp( content, '(?<=(^|\n)r )[^\r\n]*', 'match' ) ;
    with that you get
    >> nPlus
    nPlus =
    4
    and
    >> fprintf( '%s\n', rRows{:} ) ;
    0.170955 1 3 tcp 1500 ------- 0 0.0 3.0 1 2
    0.178955 1 3 tcp 1500 ------- 0 0.0 3.0 2 3
    PS: I can explain the regexp pattern if anyone is interested. Just let me know.
    EDIT: I slightly modified the call to regexp to manage cases with/without header.