I am trying to filter a column which contains several keywords (in this example dog and cat) but I am having problems as only the first element is being used.
Try this:
dfilter <- df1[sapply(filter1, function(x) grep(x,df1$type)),]
It's complaining because your filter is a vector and grep wants a string.
From this answer:
dfilter <- df1[df1$type %in% grep(paste(filter1, collapse="|"), df1$type, value=TRUE), ]