r-如何在na和0的任何列中筛选行,但不使用真值

  • 本文关键字:筛选 na 任何列 r filter na
  • 更新时间 :
  • 英文 :


这是我的数据帧

df1 = structure(list(item = c(NA, "polygon", NA, NA, NA, NA, NA, "polygon", 
"polygon", "0", NA, "polygon", "polygon"), identity = c("pol", 
"0", NA, NA, NA, NA, "0", "pol", "pol", "0", NA, "pol", "pol"
), unique = c("polx", "0", "0", "0", "0", "0", "0", "polx", "0", 
"0", NA, "polx", "0"), detect = c("ox", "0", "0", "0", "0", "0", 
NA, NA, "ox", "0", NA, "ox", NA), structure = c("hex", "0", "0", 
"0", "0", "0", NA, "hex", "hex", "0", NA, "hex", "hex"), key = c("IUGDG", 
"0", "0", "0", NA, "0", NA, "IUGDG", "IUGDG", "0", NA, "IUGDG", 
"IUGDG"), code = c("adg434kk", "0", "0", "0", NA, "0", NA, "adg434kk", 
"adg434kk", "0", NA, "adg434kk", "adg434kk")), class = "data.frame", row.names = c(NA, 
-13L))
item identity unique detect structure   key     code
1     <NA>      pol   polx     ox       hex IUGDG adg434kk
2  polygon        0      0      0         0     0        0
3     <NA>     <NA>      0      0         0     0        0
4     <NA>     <NA>      0      0         0     0        0
5     <NA>     <NA>      0      0         0  <NA>     <NA>
6     <NA>     <NA>      0      0         0     0        0
7     <NA>        0      0   <NA>      <NA>  <NA>     <NA>
8  polygon      pol   polx   <NA>       hex IUGDG adg434kk
9  polygon      pol      0     ox       hex IUGDG adg434kk
10       0        0      0      0         0     0        0
11    <NA>     <NA>   <NA>   <NA>      <NA>  <NA>     <NA>
12 polygon      pol   polx     ox       hex IUGDG adg434kk
13 polygon      pol      0   <NA>       hex IUGDG adg434kk

预期输出:

item identity unique detect structure   key     code
1    <NA>     <NA>      0      0         0     0        0
2    <NA>     <NA>      0      0         0     0        0
3    <NA>     <NA>      0      0         0  <NA>     <NA>
4    <NA>     <NA>      0      0         0     0        0
5    <NA>        0      0   <NA>      <NA>  <NA>     <NA>

我尝试了一些类似于我之前在"如何在任何列中筛选na和空值而不是0"中发布的内容,并更改为如下语法,但不起作用:

df1 %>%
filter(if_any(item:code, ~ is.na(.x)),
if_any(item:code, ~ .x == 0),
!if_any(item:code, complete.cases))

有人能帮忙吗?谢谢

# Extract rows that only consists of NA and zero
df2 <- df1[ rowSums(is.na(df1) | (df1 == 0)) == ncol(df1), ]
> df2
item identity unique detect structure  key code
3  <NA>     <NA>      0      0         0    0    0
4  <NA>     <NA>      0      0         0    0    0
5  <NA>     <NA>      0      0         0 <NA> <NA>
6  <NA>     <NA>      0      0         0    0    0
7  <NA>        0      0   <NA>      <NA> <NA> <NA>
10    0        0      0      0         0    0    0
11 <NA>     <NA>   <NA>   <NA>      <NA> <NA> <NA>

# Exclude rows with only NA and zero
df3 <- df2[ rowSums(is.na(df2)) != ncol(df2) & rowSums(is.na(df2)) > 0, ]
> df3
item identity unique detect structure  key code
3 <NA>     <NA>      0      0         0    0    0
4 <NA>     <NA>      0      0         0    0    0
5 <NA>     <NA>      0      0         0 <NA> <NA>
6 <NA>     <NA>      0      0         0    0    0
7 <NA>        0      0   <NA>      <NA> <NA> <NA>

我自己设法解决了这个问题:

df2 <- filter(df1, if_all(everything(), ~ is.na(.) | .x == 0)) %>%
filter(if_any(item:code, ~ .x == 0), 
if_any(item:code, ~ is.na(.)))
item identity unique detect structure  key code
1 <NA>     <NA>      0      0         0    0    0
2 <NA>     <NA>      0      0         0    0    0
3 <NA>     <NA>      0      0         0 <NA> <NA>
4 <NA>     <NA>      0      0         0    0    0
5 <NA>        0      0   <NA>      <NA> <NA> <NA>

filter(df1, if_all(everything(), ~ is.na(.) | .x == 0))给出包含的任何列的所有行

item identity unique detect structure  key code
1 <NA>     <NA>      0      0         0    0    0
2 <NA>     <NA>      0      0         0    0    0
3 <NA>     <NA>      0      0         0 <NA> <NA>
4 <NA>     <NA>      0      0         0    0    0
5 <NA>        0      0   <NA>      <NA> <NA> <NA>
6    0        0      0      0         0    0    0
7 <NA>     <NA>   <NA>   <NA>      <NA> <NA> <NA>

并执行

filter(if_any(item:code, ~ .x == 0), 
if_any(item:code, ~ is.na(.)))

只捕获具有同时具有NA和0 的任何列的行

最新更新