过滤逻辑列

时间:2021-01-28 11:58:21

标签: r

无法过滤下面的逻辑列。想检查是否有过滤的方法。如果我根据 false 进行过滤,则 NA 行将变为全部 NA。我需要带有 NA 但在其他列中有值的行?

asd <- data.frame(Cat = c("A","B","B","A","B","A"), Start_num = c(2, 5, 1, 6, 6, 4), End_num = c(3, 7, 4, 7, 8, 5))

new <- asd %>% arrange(Cat,Start_num) %>%
    group_by(Cat) %>%
    mutate(Var=lead(Start_num)>End_num)

new <- as.data.frame(new)
new[new$Var != FALSE,]
      Cat Start_num End_num  Var
1       A         2       3 TRUE
2       A         4       5 TRUE
NA   <NA>        NA      NA   NA
4       B         1       4 TRUE
NA.1 <NA>        NA      NA   NA

```

2 个答案:

答案 0 :(得分:0)

如果您想对 TRUE 值进行子集化但也有 NA 值,则需要对 NATRUE 进行子集化:

new[!is.na(new$Var) & new$Var == TRUE,]
# A tibble: 3 x 4
# Groups:   Cat [2]
  Cat   Start_num End_num Var  
  <chr>     <dbl>   <dbl> <lgl>
1 A             2       3 TRUE 
2 A             4       5 TRUE 
3 B             1       4 TRUE 

答案 1 :(得分:0)

为什么不使用 %in%

new[new$Var %in% TRUE, ]
#   Cat Start_num End_num  Var
# 1   A         2       3 TRUE
# 2   A         4       5 TRUE
# 4   B         1       4 TRUE