如何根据一个标准过滤变量,同时汇集其他信息?
How to filter a variable based on one criteria while pool other information at the same time?
此数据代表 3 人。我想过滤掉至少有一次错误为 5 的人。
id error
1 0
1 0
1 5
2 0
2 5
2 0
3 0
3 0
3 0
structure(list(id = structure(c(1, 1, 1, 2, 2, 2, 3, 3, 3), format.stata = "%9.0g"),
error = structure(c(0, 0, 5, 0, 5, 0, 0, 0, 0), format.stata = "%9.0g")), row.names = c(NA,
-9L), class = c("tbl_df", "tbl", "data.frame"))
如果我使用此代码:
df %>%
group_by(id) %>%
filter(error > 0)
如下所示,我只会得到出现错误时的出现次数,但我不会得到同一个人前后的数据。
id error
1 5
2 5
但是我想得到这个输出,因为我一直在关注人们,并且想看看之前和之后发生了什么
id error
1 0
1 0
1 5
2 0
2 5
2 0
有人可以指导我吗?
这个有用吗:
library(dplyr)
df %>% group_by(id) %>% filter(any(error == 5))
# A tibble: 6 x 2
# Groups: id [2]
id error
<dbl> <dbl>
1 1 0
2 1 0
3 1 5
4 2 0
5 2 5
6 2 0
我们也可以使用 %in%
来完成 filter
library(dplyr)
df %>%
group_by(id) %>%
filter(5 %in% error)
-输出
# A tibble: 6 x 2
# Groups: id [2]
# id error
# <dbl> <dbl>
#1 1 0
#2 1 0
#3 1 5
#4 2 0
#5 2 5
#6 2 0
此数据代表 3 人。我想过滤掉至少有一次错误为 5 的人。
id error
1 0
1 0
1 5
2 0
2 5
2 0
3 0
3 0
3 0
structure(list(id = structure(c(1, 1, 1, 2, 2, 2, 3, 3, 3), format.stata = "%9.0g"),
error = structure(c(0, 0, 5, 0, 5, 0, 0, 0, 0), format.stata = "%9.0g")), row.names = c(NA,
-9L), class = c("tbl_df", "tbl", "data.frame"))
如果我使用此代码:
df %>%
group_by(id) %>%
filter(error > 0)
如下所示,我只会得到出现错误时的出现次数,但我不会得到同一个人前后的数据。
id error
1 5
2 5
但是我想得到这个输出,因为我一直在关注人们,并且想看看之前和之后发生了什么
id error
1 0
1 0
1 5
2 0
2 5
2 0
有人可以指导我吗?
这个有用吗:
library(dplyr)
df %>% group_by(id) %>% filter(any(error == 5))
# A tibble: 6 x 2
# Groups: id [2]
id error
<dbl> <dbl>
1 1 0
2 1 0
3 1 5
4 2 0
5 2 5
6 2 0
我们也可以使用 %in%
来完成 filter
library(dplyr)
df %>%
group_by(id) %>%
filter(5 %in% error)
-输出
# A tibble: 6 x 2
# Groups: id [2]
# id error
# <dbl> <dbl>
#1 1 0
#2 1 0
#3 1 5
#4 2 0
#5 2 5
#6 2 0