Я использовал именованные векторы для создания data.frame. Когда я конвертирую этот data.frame в табличку, я получаю именованные списки вместо обычных столбцов. Как я могу удалить эти имена?
пример данных
ww = structure(list(is_character = list(`labA` = 1, `labB` = 1, `labC` = 1),
is_numeric = list(`labA` = 0, `labB` = 0, `labC` = 0),
is_logical = list(`labA` = 0, `labB` = 0, `labC` = 0),
column_name = c("labA", "labB", "labC")),
row.names = c(NA, -3L), class = "data.frame")
Все выглядит нормально при просмотре в виде кадра данных. as.data.frame(ww)
возвращает следующее:
is_character is_numeric is_logical column_name
1 1 0 0 labA
2 1 0 0 labB
3 1 0 0 labC
Но при преобразовании в таблицу я получаю именованные списки вместо простых столбцов. as_tibble(ww)
возвращает следующее:
# A tibble: 3 x 4
is_character is_numeric is_logical column_name
<named list> <named list> <named list> <chr>
1 <dbl [1]> <dbl [1]> <dbl [1]> labA
2 <dbl [1]> <dbl [1]> <dbl [1]> labB
3 <dbl [1]> <dbl [1]> <dbl [1]> labC
Я не хочу работать с именованными списками в своей таблице, я хочу работать с простыми числовыми столбцами. Как я могу это сделать?
Я попытался сделать исходный data.frame из безымянных списков, но это приводит к другим проблемам. Таким образом, удаление имен предпочтительнее. Я сделал несколько попыток с unname
безуспешно.
Ваши данные всегда были набором list
s — см. str(ww)
— то, как что-то появляется при выводе на консоль и как оно хранится, не всегда одно и то же.
Есть пара простых подходов:
as_tibble(ww) %>% mutate(across(everything(), unlist))
Или
as_tibble(ww) %>% unnest(everything())
Оба подхода производят:
is_character is_numeric is_logical column_name
<dbl> <dbl> <dbl> <chr>
1 1 0 0 labA
2 1 0 0 labB
3 1 0 0 labC
Обратите внимание, что ваш столбец is_character
не является символом, а ваш столбец is_logical
нелогичен. Однако, если ваши входные данные были такими:
ww = structure(list(is_character = list(`labA` = "a", `labB` = "b", `labC` = "c"),
is_numeric = list(`labA` = 0, `labB` = 0, `labC` = 0),
is_logical = list(`labA` = T, `labB` = F, `labC` = T),
column_name = c("labA", "labB", "labC")),
row.names = c(NA, -3L), class = "data.frame")
то приведенные выше подходы дадут следующее:
# A tibble: 3 x 4
is_character is_numeric is_logical column_name
<chr> <dbl> <lgl> <chr>
1 a 0 TRUE labA
2 b 0 FALSE labB
3 c 0 TRUE labC
В этом конкретном случае вы можете просто сделать:
as_tibble(ww) %>% unnest(everything())
. Однако я не уверен, что данные вашего примера полностью отражают ваш фактический вариант использования.