R 如何使用条件过滤数据帧?
我想根据一列的值筛选数据帧 如果一列包含值123,则从中选取这些行,然后筛选C=1;如果列不包含123,则从中选择这些行,然后筛选D=0 以下是测试df: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
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), ]
我不认为这是一个新的答案,我不认为这是一个新的答案。