 <p>We can use <code>data.table</code>. Convert the 'data.frame' to 'data.table' (<code>setDT(data)</code>), grouped by 'site', <code>if</code> the length of the unique 'method' is greater than 1, then get the Subset of Data.table.</p> <pre><code>library(data.table) setDT(data)[, if(uniqueN(method)&gt;1) .SD , by = site] </code></pre> <hr> <p>Or with <code>dplyr</code>, we can do it.</p> <pre><code>library(dplyr) data %&gt;% group_by(site) %&gt;% filter(n_distinct(method)&gt;1) </code></pre> <hr> <p>A possible <code>base R</code> option would be</p> <pre><code>data[ with(data, ave(method, site, FUN = function(x) length(unique(x))&gt;1)),] </code></pre>