How to remove rows where all columns are zero using dplyr pipe

dplyr, r, tidyverse

Solution

Here's a dplyr option:

library(dplyr)
filter_all(dat, any_vars(. != 0))

#       A-XXX  fBM-XXX    P-XXX  vBM-XXX
#1 1.51653276 2.228752 1.733567 3.003979
#2 0.07703724 0.000000 0.000000 0.000000

Here we make use of the logic that if any variable is not equal to zero, we will keep it. It's the same as removing rows where all variables are equal to zero.

Regarding row.names:

library(tidyverse)
dat %>% rownames_to_column() %>% filter_at(vars(-rowname), any_vars(. != 0))
#         rowname      A-XXX  fBM-XXX    P-XXX  vBM-XXX
#1  BATF::JUN_AHR 1.51653276 2.228752 1.733567 3.003979
#2 BATF::JUN_CCR9 0.07703724 0.000000 0.000000 0.000000

Problem

I have the following data frame: ``` dat <- structure(list(`A-XXX` = c(1.51653275922944, 0.077037240321129, 0), `fBM-XXX` = c(2.22875185527511, 0, 0), `P-XXX` = c(1.73356698481106, 0, 0), `vBM-XXX` = c(3.00397859609183, 0, 0)), .Names = c("A-XXX", "fBM-XXX", "P-XXX", "vBM-XXX"), row.names = c("BATF::JUN_AHR", "BATF::JUN_CCR9", "BATF::JUN_IL10"), class = "data.frame") dat #> A-XXX fBM-XXX P-XXX vBM-XXX #> BATF::JUN_AHR 1.51653276 2.228752 1.733567 3.003979 #> BATF::JUN_CCR9 0.07703724 0.000000 0.000000 0.000000 #> BATF::JUN_IL10 0.00000000 0.000000 0.000000 0.000000 ``` I can remove the row with all column zero with this command: ``` > dat <- dat[ rowSums(dat)!=0, ] > dat A-XXX fBM-XXX P-XXX vBM-XXX BATF::JUN_AHR 1.51653276 2.228752 1.733567 3.003979 BATF::JUN_CCR9 0.07703724 0.000000 0.000000 0.000000 ``` But how can I do it with dplyr's pipe style?

Original source