Мы можем использовать map2
.Мы подаем столбец списка (data
) как аргумент .x
, а df$ID2
как аргумент .y
и фильтруем каждый .x
, где .x$ID2 != .y
:
library(tidyverse)
output <- df %>%
mutate(data = data %>% map2(ID2, ~ filter(.x, ID2 != .y)))
Выходные данные:
> output
# A tibble: 6 x 3
ID data ID2
<chr> <list> <chr>
1 ID_1 <tibble [4 x 2]> A
2 ID_1 <tibble [4 x 2]> B
3 ID_1 <tibble [4 x 2]> C
4 ID_1 <tibble [4 x 2]> D
5 ID_1 <tibble [4 x 2]> E
6 ID_1 <tibble [5 x 2]> F
> output %>%
+ pull(data)
[[1]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 B 2018-02-06
2 C 2018-02-10
3 D 2018-02-21
4 E 2018-04-05
[[2]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 C 2018-02-10
3 D 2018-02-21
4 E 2018-04-05
[[3]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 D 2018-02-21
4 E 2018-04-05
[[4]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 C 2018-02-10
4 E 2018-04-05
[[5]]
# A tibble: 4 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 C 2018-02-10
4 D 2018-02-21
[[6]]
# A tibble: 5 x 2
ID2 DATE
<chr> <date>
1 A 2018-02-01
2 B 2018-02-06
3 C 2018-02-10
4 D 2018-02-21
5 E 2018-04-05