Without using any package, we can use rowSums "Spp" columns (a subset of columns with grep ) and double negation so that rows with sum>0 are TRUE and other FALSEs. Use this index for a subset of rows.
data[!!rowSums(data[grep('Spp', names(data))]),]
Or using dplyr/magrittr , we select "Spp" columns, get the sum each row with Reduce , deny it twice, and use the extract from magrittr to subset the original dataset using the index.
library(dplyr) library(magrittr) data %>% select(matches('^Spp')) %>% Reduce(`+`, .) %>% `!` %>% `!` %>% extract(data,.,)
data
data <- structure(list(Site = c("S01", "S02", "S03", "S04"), Spp1 = c(2L, 4L, 0L, 4L), Spp2 = c(4L, 0L, 0L, 0L), Spp3 = c(0L, 0L, 0L, 0L ), LOC = c("A", "A", "A", "A"), TYPE = c("FLOOD", "REG", "FLOOD", "REG")), .Names = c("Site", "Spp1", "Spp2", "Spp3", "LOC", "TYPE"), class = "data.frame", row.names = c(NA, -4L))