title: Get minimum grouped by unique combination of two columns
body: <p>What I'm trying to achieve in R is the following: given a table (data frame in my case) - I want to be get the lowest price for each unique combination of <em>two</em> columns.</p>
  
  <p>For example, given the following table:</p>
  
  <pre><code>+-----+-----------+-------+----------+----------+
  | Key | Feature1  | Price | Feature2 | Feature3 |
  +-----+-----------+-------+----------+----------+
  | AAA |         1 |   100 | whatever | whatever |
  | AAA |         1 |   150 | whatever | whatever |
  | AAA |         1 |   200 | whatever | whatever |
  | AAA |         2 |   110 | whatever | whatever |
  | AAA |         2 |   120 | whatever | whatever |
  | BBB |         1 |   100 | whatever | whatever |
  +-----+-----------+-------+----------+----------+
  </code></pre>
  
  <p>I want a result that looks like:</p>
  
  <pre><code>+-----+-----------+-------+----------+----------+
  | Key | Feature1  | Price | Feature2 | Feature3 |
  +-----+-----------+-------+----------+----------+
  | AAA |         1 |   100 | whatever | whatever |
  | AAA |         2 |   110 | whatever | whatever |
  | BBB |         1 |   100 | whatever | whatever |
  +-----+-----------+-------+----------+----------+
  </code></pre>
  
  <p>So I'm working on a solution along the lines of:</p>
  
  <pre><code>s &lt;- lapply(split(data, list(data$Key, data$Feature1)), function(chunk) { 
          chunk[which.min(chunk$Price),]})
  </code></pre>
  
  <p>But the result is a 1 x n matrix - so I need to <code>unsplit</code> the result. Also - it seems very slow. How can I improve this logic? 
  I've seen solutions pointing in the directions of the <code>data.table</code> package. Should I re-write using that package? </p>
  
  <p><strong>Update</strong></p>
  
  <p>Great answers guys - thanks! However - my original dataframe contains more columns ( Feature2 ... ) and I need them all back after the filtering. The rows that do not have the lowest price ( for the combination of Key/Feature1 ) can be discarded, so I'm not interested in their values for Feature2 / Feature3</p>