R 如何使用条件过滤数据帧?

R 如何使用条件过滤数据帧?,r,R,我想根据一列的值筛选数据帧 如果一列包含值123,则从中选取这些行,然后筛选C=1;如果列不包含123,则从中选择这些行,然后筛选D=0 以下是测试df: Book1 <- data.frame( 'A' = c(123, 5, 6, 12, 445, 123), 'B' = c(4, 56, 77, 1, 2, 3), 'C' = c(1, 1, 0, 0, 1, 0), 'D' = c(1, 0, 0, 1, 1, 0) ) 然后使用rbind生成结果: A

我想根据一列的值筛选数据帧

如果一列包含值123,则从中选取这些行,然后筛选C=1;如果列不包含123,则从中选择这些行,然后筛选D=0

以下是测试df:

Book1 <- data.frame(
  'A' = c(123, 5, 6, 12, 445, 123),
  'B' = c(4, 56, 77, 1, 2, 3),
  'C' = c(1, 1, 0, 0, 1, 0),
  'D' = c(1, 0, 0, 1, 1, 0)
)
然后使用rbind生成结果:

    A  B C D
1 123  4 1 1
2   5 56 1 0
3   6 77 0 0
但是,如果你想得到同样的结果,有人能教我如何使用maybe filter吗

谢谢大家!

您可以使用&和|或区分您的条件,即

filter(Book1, (A == 123 & C == 1) | (A != 123 & D == 0))
#    A  B C D
#1 123  4 1 1
#2   5 56 1 0
#3   6 77 0 0
您可以使用&和|或区分您的条件,即

filter(Book1, (A == 123 & C == 1) | (A != 123 & D == 0))
#    A  B C D
#1 123  4 1 1
#2   5 56 1 0
#3   6 77 0 0
你可以

library(dplyr)

Book1 %>%
  filter(if_else(A == 123, C == 1, D == 0))

#    A  B C D
#1 123  4 1 1
#2   5 56 1 0
#3   6 77 0 0
这也可以在base R中完成

Book1[with(Book1, ifelse(A == 123, C == 1, D == 0)), ]
你可以

library(dplyr)

Book1 %>%
  filter(if_else(A == 123, C == 1, D == 0))

#    A  B C D
#1 123  4 1 1
#2   5 56 1 0
#3   6 77 0 0
这也可以在base R中完成

Book1[with(Book1, ifelse(A == 123, C == 1, D == 0)), ]

正如@Ronak Shah所建议的,没有with的语法略有不同:

 Book1[ifelse(Book1$A == 123, Book1$C == 1, Book1$D == 0), ]

正如@Ronak Shah所建议的,没有with的语法略有不同:

 Book1[ifelse(Book1$A == 123, Book1$C == 1, Book1$D == 0), ]

我不认为这是一个新的答案,我不认为这是一个新的答案。