是否可以使用dplyr的filter()函数仅过滤数据帧的子集?
这是一个简单的例子:
> df <- structure(list(ColA = c("x", "x", "x", "y", "y", "y"), ColB = c(1,
2, 3, 1, 2, 3)), .Names = c("ColA", "ColB"), class = c("tbl_df",
"tbl", "data.frame"), row.names = c(NA, -6L))
> df
# A tibble: 6 x 2
ColA ColB
<chr> <dbl>
1 x 1
2 x 2
3 x 3
4 y 1
5 y 2
6 y 3
我想过滤列&#34; ColB&#34;是&#34; 1&#34;,但仅限于&#34; ColA&#34;是&#34; y&#34;。这是想要的结果:
> df
# A tibble: 6 x 2
ColA ColB
<chr> <dbl>
1 x 1
2 x 2
3 x 3
4 y 1
基地R并不难......
df[df$ColA == "x" | (df$ColA == "y" & df$ColB == 1),]
它不应该与dplyr ...但我仍然不能完全得到这个稍微不典型的情况......我必须处理数据子集(我仍然不清楚这是否可行或在哪些情况下) 我正在使用的数据比这大得多,我正在使用dplyr的管道。如果我设法使用dplyr,它将更容易阅读和更快。
谢谢!
答案 0 :(得分:1)
容易羞怯
df %>% filter((ColA == "x") | (ColA == "y" & ColB == 1))
答案 1 :(得分:1)
它与基础R几乎相同。您需要做的是将条件放在filter
函数的参数中。我将==
更改为%in%
但是对于您的示例数据集,它们会产生相同的输出,因为NA
中没有ColA
。
library(dplyr)
df2 <- df %>%
filter(ColA %in% "x" | (ColA %in% "y" & ColB == 1))