我有以下数据,为此,我只需要过滤每个组(id)具有“进取量”和“流量”的行。结果应该是这样的:
> df <- tibble(id = c(1, 1, 2, 3, 3, 4, 4, 5, 6, 7, 7),
+ type = c("intake", "discharge", "intake", "intake", "discharge",
+ "intake", "discharge", "intake", "intake", "intake", "discharge"))
> df
id type
<dbl> <chr>
1 1 intake
2 1 discharge
3 2 intake
4 3 intake
5 3 discharge
6 4 intake
7 4 discharge
8 5 intake
9 6 intake
10 7 intake
11 7 discharge对此:
id type
<dbl> <chr>
1 1 intake
2 1 discharge
3 3 intake
4 3 discharge
5 4 intake
6 4 discharge
7 7 intake
8 7 discharge这样,不同时具有进给量和排出量的组(ids)被移除(并且只有那些两者兼备的组(Ids)被保留)。
我希望这有道理..。抱歉,今天太长了。
发布于 2022-02-02 09:03:12
下面是一种选择具有"intake"和"discharge"的组的方法。
library(dplyr)
values <- c('intake', 'discharge')
df %>%
group_by(id) %>%
filter(all(values %in% type) & type %in% values) %>%
ungroup
# id type
# <dbl> <chr>
#1 1 intake
#2 1 discharge
#3 3 intake
#4 3 discharge
#5 4 intake
#6 4 discharge
#7 7 intake
#8 7 dischargeall(values %in% type)选择具有两个值的完整组,而type %in% values将在那些具有两个值之一的组行中进行选择。
发布于 2022-02-02 07:12:10
library(dplyr)
df %>%
group_by(id) %>%
filter(sum(type == "intake") >= 1,
sum(type == "discharge") >= 1) %>%
# add below if we only want intake/discharge lines
# filter(type %in% c("intake", "discharge")) %>%
ungroup()结果(由于OP中添加了“其他”,期望的行为不明确)
# A tibble: 9 x 2
id type
<dbl> <chr>
1 1 intake
2 1 discharge
3 3 intake
4 3 discharge
5 3 other
6 4 intake
7 4 discharge
8 7 intake
9 7 dischargehttps://stackoverflow.com/questions/70951525
复制相似问题