Это, по сути, дополнительный вопрос к предыдущему одному , на который любезно ответил @keqiang-li
.
У меня есть кадр данных, который включает столбец списка (вложенные кадры данных), содержащийпартии в правительстве и количество их соответствующих мест.Этот фрейм данных разделен по странам (обратите внимание, что я использовал новые dplyr
0,8 group_nest
и group_split
).
По сути, я пытаюсь получить еще один столбец списка, в котором для каждого правительства есть список длякаждое предыдущее правительство, имеющее информационный блок, указывающий на перекрытие партий и мест.
library(tidyverse)
df <- tibble::tribble(
~period, ~party, ~seats,
1, "A", 2,
1, "B", 3,
1, "C", 3,
2, "A", 2,
2, "C", 3,
3, "C", 4,
3, "E", 1,
3, "F", 3
)
df <- bind_rows(AA=df, BB=df, .id="country")
df <- df %>%
group_by(country, period) %>%
group_nest() %>%
#mutate(gov=map(data, "party") %>% map(.,list)) %>%
mutate(prev.govs=map(data, "party") %>%
map(., list) %>%
accumulate(.,union))
df <- df %>%
group_split(country) %>%
map(., ~mutate(., prev.govs.df=map_depth(prev.govs, 2, enframe, value="party")))
df - моя отправная точка.Ниже безуспешных попыток.
##attempts
df %>%
map(., ~mutate(., df.overlap=map_depth(prev.govs.df, 3, ~map2(., data, inner_join))))
#> Error in UseMethod("inner_join"): nicht anwendbare Methode für 'inner_join' auf Objekt der Klasse "c('integer', 'numeric')" angewendet
df %>%
map(., ~mutate(., df.overlap=map_depth(prev.govs.df, 2, ~map2(., data, inner_join))))
#> Error: Mapped vectors must have consistent lengths:
#> * `.x` has length 2
#> * `.y` has length 3
df %>%
map(., ~mutate(., df.overlap=map2(data, prev.govs.df, ~map2(.x, .y, ~map2(.x, .y, inner_join)))))
#> Error: Mapped vectors must have consistent lengths:
#> * `.x` has length 3
#> * `.y` has length 2
На более конкретном уровне решением для country
AA в периоде 3 будут 3 списка, каждый из которых содержит столбик с строками из data
, которые перекрываются с теми, что вprev.govs.def
в столбце party
(ключ)
df[[1]][["prev.govs.df"]][[3]]
#> [[1]]
#> # A tibble: 3 x 2
#> name party
#> <int> <chr>
#> 1 1 A
#> 2 2 B
#> 3 3 C
#>
#> [[2]]
#> # A tibble: 2 x 2
#> name party
#> <int> <chr>
#> 1 1 A
#> 2 2 C
#>
#> [[3]]
#> # A tibble: 3 x 2
#> name party
#> <int> <chr>
#> 1 1 C
#> 2 2 E
#> 3 3 F
df[[1]][["data"]][[3]]
#> # A tibble: 3 x 2
#> party seats
#> <chr> <dbl>
#> 1 C 4
#> 2 E 1
#> 3 F 3
Ответ на предыдущий вопрос решил загадку, как пересекать два списка.К сожалению, я не мог понять, как сделать следующий шаг, который повлечет за собой разбиение кадра данных и объединение вложенных фрагментов.
Отлично подходит для любой подсказки!