В таблице ниже приведен список-столбец property
, содержащий некоторые пропущенные значения:
library(tidyverse)
tbl = tibble(type = c('scale', 'range', 'min', 'max'),
property = list(list(lttr = letters, mth = month.name), NA) %>%
rep(., 2))
# A tibble: 4 x 2
type property
<chr> <list>
1 scale <list [2]>
2 range <lgl [1]>
3 min <list [2]>
4 max <lgl [1]>
Я хотел бы удалить этот столбец и затем распространить результат в широкий формат с тремя столбцами - type
, lttr
и mth
:
tbl = tibble(type = c('scale', 'range', 'min', 'max'),
property = list(list(lttr = letters, mth = month.name), NA) %>%
rep(., 2)) %>%
mutate(property = map_if(property, is_list, enframe)) %>%
unnest(property) %>%
spread(name, value)
Однако при вызове unnest
выдается следующая ошибка:
Error: Each column must either be a list of vectors or a list of data frames [property]
Я столкнулся с похожей проблемой в Git , которая просит unnest
поддержать значения NULL
, но не упоминает NAs
. Похоже, в документации по функциям нет никаких аргументов, касающихся пропусков, но я могу ошибаться.
Трубопровод работает, как ожидается, если отфильтрованы NAs
:
tbl = tibble(type = c('scale', 'range', 'min', 'max'),
property = list(list(lttr = letters, mth = month.name), NA) %>%
rep(., 2)) %>%
mutate(property = map_if(property, is_list, enframe)) %>%
filter(!is.na(property)) %>% # drop_na() and na_omit not working not sure why
unnest(property) %>%
spread(name, value)
tbl
# A tibble: 2 x 3
type lttr mth
<chr> <list> <list>
1 min <chr [26]> <chr [12]>
2 scale <chr [26]> <chr [12]>