Как выбрать группы из вложенных данных в dplyr? - PullRequest
0 голосов
/ 25 марта 2020

Я сгруппировал данные, и nest(), похоже, позволяет быстро их обобщать. Я хотел бы выбрать группы на основе информации из списка, а именно количество наблюдений. Как я могу получить доступ к этим номерам?

library(tidyr)
library(gapminder)

gapminder %>% 
  group_by(continent) %>%
  nest()

# A tibble: 5 x 2
  continent data              
  <fct>     <list>            
1 Asia      <tibble [396 x 5]>
2 Europe    <tibble [360 x 5]>
3 Africa    <tibble [624 x 5]>
4 Americas  <tibble [300 x 5]>
5 Oceania   <tibble [24 x 5]> 

# How to select continents with more than 350 observations?

Я пробовал комбинации sample_n(), но, конечно, каждый элемент вложенных данных имеет размер 1. Как я могу получить информацию о количестве наблюдений, которую я так легко вижу из вывода моей консоли для дальнейшие выборы?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Другое возможное решение (и очень похожее на r2evans) может быть достигнуто с использованием map_lgl() из library(purrr), например, так:

library(tidyverse)
library(gapminder)

gapminder %>% 
  group_by(continent) %>%
  nest() %>% 
  filter(purrr::map_lgl(data, ~ nrow(.x) > 350))
#> # A tibble: 3 x 2
#> # Groups:   continent [5]
#>   continent data              
#>   <fct>     <list>            
#> 1 Asia      <tibble [396 x 5]>
#> 2 Europe    <tibble [360 x 5]>
#> 3 Africa    <tibble [624 x 5]>

Создано в 2020-03-25 представьте пакет (v0.3.0)

1 голос
/ 25 марта 2020

Не проверено.

gapminder %>%
  group_by(continent) %>%
  nest() %>%
  mutate(n = sapply(data, NROW)) %>%
  filter(n > 300)

или просто

gapminder %>%
  group_by(continent) %>%
  nest() %>%
  filter(sapply(data, NROW) > 300)

Вы можете заменить sapply на purrr::map_int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...