【发布时间】:2022-09-27 22:50:09
【问题描述】:
我有一个过滤问题如下:
df <- data.frame(id = c(1,1,1, 2,2, 3,3, 4,4, 5, 6),
cat =c(\"A\",\"B\",\"C\", \"A\",\"C\", \"B\",\"C\", \"A\",\"B\", \"A\", \"B\"),
value = c(\"Y\",\"N\",\"Y\", \"Y\",\"N\", \"N\",\"Y\", \"N\",\"Y\", \"N\",\"Y\"))
> df
id cat value
1 1 A Y
2 1 B N
3 1 C Y
4 2 A Y
5 2 C N
6 3 B N
7 3 C Y
8 4 A N
9 4 B Y
10 5 A N
11 6 B Y
过滤规则:
1) 当id 有三个cat 时,我只需要保留cat B。
2) 当id 有两个cat - A 和B 时,我只需要保留cat B。
3) 当id 有两个cat - A 和C 时,我只需要保留cat C。
4) 当id 有两个cat - B 和C 时,我只需要保留cat B。
5) 当id 有一个cat - 保留类别。
总之,所需的cat 顺序是第一个B,然后是C,最后一个A(如果只有一个类别)。
我怎样才能实现这个所需的数据框:
> df1
id cat value
1 1 B N
2 2 C N
3 3 B N
4 4 B Y
5 5 A N
6 6 B Y
它在下面尝试了这个,但它只考虑cat B 过滤。当cats 是A 和C 时,我还需要添加C 过滤。
df %>% group_by(id) %>% mutate(value = value[match(\"B\", cat, nomatch = 1)]) %>% ungroup
-
你试过什么?什么不工作?将一堆过滤条件加在一起,这似乎是可行的