Here are the two main approaches. I prefer this one for its readability:
bar <- subset(foo, location == "there")
Note that you can string together many conditionals with & and | to create complex subsets.
The second is the indexing approach. You can index rows in R with either numeric or boolean slices. foo$location == "there" returns a vector of T and F values that is the same length as the rows of foo. You can do this to return only rows where the condition returns true.
foo[foo$location == "there", ]