在不使用任何包的情况下,我们可以使用rowSums
'Spp'列(使用列的子集grep
)和double negate,以便sum>0
使用的行为TRUE而其他行为FALSE.使用此索引对行进行子集化.
data[!!rowSums(data[grep('Spp', names(data))]),]
或者使用dplyr/magrittr
我们select
的'Spp'列,获取sum
每一行Reduce
,双重否定并使用extract
from magrittr
来将原始数据集与派生的索引进行子集化.
library(dplyr) library(magrittr) data %>% select(matches('^Spp')) %>% Reduce(`+`, .) %>% `!` %>% `!` %>% extract(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))
我意识到这个问题现在已经很老了,但是我遇到了这个问题,找到了另一个使用dplyr的“选择”和“哪个”解决方案,对于dplyr的爱好者来说,这似乎更清楚:
A.B.flood.subset <- A.B.flood %>% select(which(!colSums(A.B.flood, na.rm=TRUE) %in% 0))