bvaughn's answer is nice and clean and simple, especially if you have only a few columns. It's also intuitively scalable if you add more columns. If you have a lot of columns, though, that approach can start to get unwieldy.
Here's a different approach that scales better if you ever have to expand the problem with more columns.
Explanation, working from the inside out:
MAX(Q2:S2) identifies the maximum value in the range.
MATCH(MAX(Q2:S2),Q2:S2,0) locates that value in the range, giving you a position number.
CHOOSE(position,"N","B","T") selects from the list of output values using that same relative position.
This type of formula can handle a large number of columns by just adding the outputs to the list (and adjusting the range, of course). The workhorse portion doesn't change when the columns grow. The formula stays compact because the only thing that grows as you add columns is the list of output values.
The CHOOSE function is needed only because you are using labels different from the column headers. If you use the column headers ("News", "Books", "Tweets" in this case), you can use a generic formula that just references the ranges:
Locating the position of the highest number is the same as before, but it is used to select from the headers in the first row using INDEX. This formula would remain the same for any number of columns, just specifying the range.