Remove specified non-numeric rows
JavaScript (ES6), 48 46 bytes

(a,l)=&gt;a.filter(r=&gt;l.some(c=&gt;r[a=0,c]&lt;1/0)||a)


Explanation

Expects an array of rows as arrays, and an array of 0-indexed numbers for the columns to check. Returns an array of arrays.

Straight-forward filter and some. Checks for NaN by using n &lt; Infinity (true for finite numbers, false for NaNs).



var solution =

(a,l)=&gt;
  a.filter(r=&gt;     // for each row r
    l.some(c=&gt;     // for each column to check c
      r[a=0,       // set a to false so we know the some was executed
        c]&lt;1/0     // if any are not NaN, do not remove the row
    )
    ||a            // default to a because if l is of length 0, some returns false but
  )                //     we must return true
&lt;textarea id="matrix" rows="5" cols="40"&gt;16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1&lt;/textarea&gt;&lt;br /&gt;
&lt;input type="text" id="columns" value="0 2" /&gt;
&lt;button onclick="result.textContent=solution(matrix.value.split('\n').map(l=&gt;l.split(' ').map(n=&gt;+n)),(columns.value.match(/\d+/g)||[]).map(n=&gt;+n)).join('\n')"&gt;Go&lt;/button&gt;
&lt;pre id="result"&gt;&lt;/pre&gt;