简体   繁体   中英

How to filter across any columns for na and empty value but not 0

Here's my dataframe:

df1 = structure(list(item = c("HY04SB", "GSP8Y1", "8OK8N6", "V2RIP7", 
"51H9V8", "", "5C45YN", "PM271I", "4WVDD9"), weird = c("", "", 
"", "v1b+m#|1", "f%nfw+j<", "[3-qzg76", "13k{-ftr", "", "sywf|*l!"
), simple = c(14661746L, NA, 88171210L, NA, 0L, 35586016L, NA, 
0L, 23761616L), code = c("WX&}Awx:65Dgn9A3", "0", "7jcP!&EAJFT=4=Xv", 
"}7p92w~STX>2M5TP", "", "EvEH+hV=}6X,aS'Q", "", "r*C'U9LA\"tr$p_X;", 
"0")), class = "data.frame", row.names = c(NA, -9L))

> df1 
    item    weird   simple             code
1 HY04SB          14661746 WX&}Awx:65Dgn9A3
2 GSP8Y1                NA                0
3 8OK8N6          88171210 7jcP!&EAJFT=4=Xv
4 V2RIP7 v1b+m#|1       NA }7p92w~STX>2M5TP
5 51H9V8 f%nfw+j<        0                 
6        [3-qzg76 35586016 EvEH+hV=}6X,aS'Q
7 5C45YN 13k{-ftr       NA                 
8 PM271I                 0 r*C'U9LA"tr$p_X;
9 4WVDD9 sywf|*l! 23761616                0

I'm not sure how to make the below syntax to work in order to retrieve any rows that contain empty value and na but not 0

df1_na_empty_but_not_zero <- df1 %>% 
          filter(if_any(item: code %in% c(~ is.na(.), ~ !.x == "0", ~.x == "")))

Expected output:

item    weird   simple             code
1 HY04SB          14661746 WX&}Awx:65Dgn9A3
3 8OK8N6          88171210 7jcP!&EAJFT=4=Xv
4 V2RIP7 v1b+m#|1       NA }7p92w~STX>2M5TP
6        [3-qzg76 35586016 EvEH+hV=}6X,aS'Q
7 5C45YN 13k{-ftr       NA       

      

Can someone help please? Thanks.

Here is an option

df1 %>% filter(!if_any(everything(), ~ .x == 0 & !is.na(.x)))
#    item    weird   simple             code
#1 HY04SB          14661746 WX&}Awx:65Dgn9A3
#2 8OK8N6          88171210 7jcP!&EAJFT=4=Xv
#3 V2RIP7 v1b+m#|1       NA }7p92w~STX>2M5TP
#4        [3-qzg76 35586016 EvEH+hV=}6X,aS'Q
#5 5C45YN 13k{-ftr       NA                 

You need to set 2 conditions:

library(dplyr)

df1 %>%
  filter(if_any(item:code, ~ .x == "" | is.na(.x)),
         if_all(item:code, ~ .x != 0  | is.na(.x)))

#     item    weird   simple             code
# 1 HY04SB          14661746 WX&}Awx:65Dgn9A3
# 2 8OK8N6          88171210 7jcP!&EAJFT=4=Xv
# 3 V2RIP7 v1b+m#|1       NA }7p92w~STX>2M5TP
# 4        [3-qzg76 35586016 EvEH+hV=}6X,aS'Q
# 5 5C45YN 13k{-ftr       NA

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM