当前位置:  开发笔记 > 编程语言 > 正文

使用dplyr删除所有列总和为零

如何解决《使用dplyr删除所有列总和为零》经验,为你挑选了2个好方法。



1> akrun..:

在不使用任何包的情况下,我们可以使用rowSums'Spp'列(使用列的子集grep)和double negate,以便sum>0使用的行为TRUE而其他行为FALSE.使用此索引对行进行子集化.

data[!!rowSums(data[grep('Spp', names(data))]),]

或者使用dplyr/magrittr我们select的'Spp'列,获取sum每一行Reduce,双重否定并使用extractfrom 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))



2> Whizz..:

我意识到这个问题现在已经很老了,但是我遇到了这个问题,找到了另一个使用dplyr的“选择”和“哪个”解决方案,对于dplyr的爱好者来说,这似乎更清楚:

A.B.flood.subset <- A.B.flood %>% select(which(!colSums(A.B.flood, na.rm=TRUE) %in% 0))

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有