假设我有以下这样一个数据框:
day value group type id
1 1 0.1 A X 1
2 1 0.4 A Y 1
3 2 0.2 A X 3
4 2 0.5 A Y 3
5 3 0.3 A X 5
6 3 0.2 A Y 6
7 1 0.1 B X 3
8 1 0.3 B Y 3
9 2 0.1 B X 11
10 2 0.4 B Y 10
11 3 0.2 B X 12
12 3 0.3 B Y 12
13 1 0.1 C X 12
14 1 0.3 C Y 12
15 2 0.3 C X 5
16 2 0.2 C Y 5
17 3 0.2 C X 3
18 3 0.2 C Y 2
数据:
library(dplyr)
df1 <- data.frame(
day = rep(1:3,6),
value = c(0.1,0.2,0.3,0.4,0.5,0.2,0.1,0.1,0.2,0.3,0.4,0.3, 0.1,0.3,0.2,0.3,0.2,0.2),
group = rep(LETTERS[1:3], each=6)
) %>%
arrange(group,day) %>%
mutate(type=rep(LETTERS[24:25],9),
id = c(1,1,3,3,5,6,3,3,11,10,12,12,12,12,5,5,3,2))
df1
我希望能够基于条件过滤对该数据框进行筛选。我想要
按照(day, group)分组
,如果每个分组中的所有id
都相等,则 过滤
掉所有类型为Y的行,但保留类型为X的行。
我可以通过运行循环或通过数据框子集的几个步骤来完成此操作,但我想知道是否有一个一/两行代码的或方法?
这将是期望的输出: day value group type id
1 1 0.1 A X 1
3 2 0.2 A X 3
5 3 0.3 A X 5
6 3 0.2 A Y 6
7 1 0.1 B X 3
9 2 0.1 B X 11
10 2 0.4 B Y 10
11 3 0.2 B X 12
13 1 0.1 C X 12
15 2 0.3 C X 5
17 3 0.2 C X 3
18 3 0.2 C Y 2
dplyr
中的等效函数是n_distinct
。 - akrun