I'm worried that in scala, filter takes a predicate that means *keep* the items (and there is filterNot for the opposite). It seem like this method is somewhat the reverse semantics, if the predicate here is: that is defined at (row, col), then this is a filterNot.

Can we be more verbose here?  removeElementsBy?  Then we could also have keepElementsBy and keep with your keepBy semantics below.