![](/img/trans.png)
[英]Accessing grouping variables in purrr::map() with nested dataframes
[英]purrr::map() a deeply nested list to test for equality of dataframes
我有一個包含嵌套列表集的列表。 我需要測試最低級別中的所有數據幀是否相等,並且在進行此測試時我需要尊重數據的分組。
我正在嘗試使用purrr::map()
解決問題,但我在理解如何迭代每個子列表時遇到了真正的麻煩。
我在這個例子中使用了gapminder
只是因為它可以嵌套兩次,這與我的實際數據相同(我不能在這里分享)。
library(dplyr)
library(gapminder)
library(purrr)
tf <- gapminder %>%
select(continent, country, year) %>%
group_by(continent, year) %>%
nest() %>%
arrange(desc(year)) %>%
ungroup() %>%
group_by(year) %>%
nest()
tf$data[[1]]
包含每個大陸的數據列表。 我需要檢查這些列表是否相等。 這個數據集在這個級別產生不等的列表,但沒關系,我只需要我的實際數據的模式。
我的嘗試只允許我遍歷底層的一個列表。
map_chr(tf$data[[1]]$data, all_equal, current = tf$data[[1]]$data[[1]])
我需要在底層做這在所有的列表:每年TF的,每個列表中tf$data
,每個大洲的tf$data[[1]]
每個列表中tf$data[[1]]$data
,比較第一個列表tf$data[[1]]$data[[1]]
是否等於該級別的其他列表。
為什么不將列表取消一級? 然后您可以使用dplyr
提供的所有dplyr
,例如 group-wise mutate
:
tf %>%
unnest(data) %>%
mutate(equal_to_first = map_chr(data, all_equal, current = data[[1]])) %>%
unnest(equal_to_first)
結果:
# A tibble: 60 x 4
# Groups: year [12]
year continent data equal_to_first
<int> <fct> <list> <chr>
1 2007 Asia <tibble [33 × 1]> TRUE
2 2007 Europe <tibble [30 × 1]> Different number of rows
3 2007 Africa <tibble [52 × 1]> Different number of rows
4 2007 Americas <tibble [25 × 1]> Different number of rows
5 2007 Oceania <tibble [2 × 1]> Different number of rows
6 2002 Asia <tibble [33 × 1]> TRUE
7 2002 Europe <tibble [30 × 1]> Different number of rows
8 2002 Africa <tibble [52 × 1]> Different number of rows
9 2002 Americas <tibble [25 × 1]> Different number of rows
10 2002 Oceania <tibble [2 × 1]> Different number of rows
# … with 50 more rows
如果您想恢復原始結構,只需再次nest
結果即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.