Как разместить список векторов в кадре данных? - PullRequest
1 голос
/ 14 апреля 2020

Я не уверен, правильно ли задан вопрос, но у меня есть фрейм данных, который можно создать с помощью следующего кода

library(dplyr)

counties <- c("aaa", "aaa", "aaa", "bbb", "bbb", "ccc", "ccc", "ccc", "ccc")
zips <- c(1321, 1321, 1322, 1523, 1567, 2102, 2102, 2134, 2140)

example_data <- data.frame(county = counties, zip = zips)

example_data_unique <- example_data %>% 
  select(county, zip) %>% 
  group_by(county, zip) %>% 
  slice(1) %>% 
  ungroup()

Моя конечная цель - создать фрейм данных / таблицу, чтобы каждый округ появляется только один раз, и переменная zip теперь является вектором всех zip в этом округе. Это выглядело бы примерно так:

zip округа

aaa c (1321, 1322)

bbb c (1523, 1567)

Ответы [ 2 ]

2 голосов
/ 14 апреля 2020

Вот базовое решение R с использованием aggregate + unique

dfout <- aggregate(.~county,example_data,unique)

таким, что

> dfout
  county              zip
1    aaa       1321, 1322
2    bbb       1523, 1567
3    ccc 2102, 2134, 2140
2 голосов
/ 14 апреля 2020

Мы можем использовать split для создания list из unique значений

lst1 <- with(unique(example_data), split(zip, county))

В dplyr это можно сделать с помощью

library(dplyr)
example_data %>%
    distinct %>%
    group_by(county) %>%
    nest

Или оберните с list в summarise

example_data %>%
    distinct %>%
    group_by(county) %>%
    summarise(zip = list(zip))
# A tibble: 3 x 2
#  county zip      
#  <fct>  <list>   
#1 aaa    <dbl [2]>
#2 bbb    <dbl [2]>
#3 ccc    <dbl [3]>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...