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?