Преобразование столбцов data.frame из списков в векторы - PullRequest
1 голос
/ 10 марта 2020

У меня есть data.frame, созданный из списка "y" с использованием кода

map_dfr(y, ~as.data.frame(t(.x))) 

Формат работает для меня, но каждый столбец информационного кадра представляет собой список, а не вектор I хотелось бы, чтобы это было. Что я могу сделать, чтобы сгладить каждый список таким образом, чтобы я сохранил структуру моего фрейма данных, но изменил формат каждого столбца?

РЕДАКТИРОВАТЬ: Вот небольшой кусочек данных в его текущем формате. То, что я хочу сделать, это перебрать каждую переменную в вектор, чтобы она принимала нормальный формат data.frame.

structure(list(member_id = list("A000055", "A000361", "A000367", 
"A000369", "A000210", "B001256", "B000013", "B001279", "B001269", 
"B001282"), name = list("Robert B. Aderholt", "Rodney Alexander", 
"Justin Amash", "Mark Amodei", "Robert E. Andrews", "Michele Bachmann", 
"Spencer Bachus", "Ron Barber", "Lou Barletta", "Andy Barr"), 
party = list("R", "R", "R", "R", "D", "R", "R", "D", "R", 
    "R"), state = list("AL", "LA", "MI", "NV", "NJ", "MN", 
    "AL", "AZ", "PA", "KY"), district = list("4", "5", "3", 
    "2", "1", "6", "6", "2", "11", "6"), cook_pvi = list(
    NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 
    NULL), vote_position = list("No", "Yes", "No", "Yes", 
    "Yes", "No", "Yes", "Yes", "Yes", "Yes"), dw_nominate = list(
    0.361, 0.331, 0.649, 0.376, -0.297, 0.584, 0.387, -0.123, 
    0.277, 0.485), bill_num = c("S47", "S47", "S47", "S47", 
"S47", "S47", "S47", "S47", "S47", "S47"), bill_title = c("Violence Against Women Reauthorization Act of 2013", 
"Violence Against Women Reauthorization Act of 2013", "Violence Against Women Reauthorization Act of 2013", 
"Violence Against Women Reauthorization Act of 2013", "Violence Against Women Reauthorization Act of 2013", 
"Violence Against Women Reauthorization Act of 2013", "Violence Against Women Reauthorization Act of 2013", 
"Violence Against Women Reauthorization Act of 2013", "Violence Against Women Reauthorization Act of 2013", 
"Violence Against Women Reauthorization Act of 2013")), row.names = c(NA, 10L), class = "data.frame")

1 Ответ

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

Вероятно, это то, что вы хотите:

y[] <- lapply(y, unlist)

Это преобразует данные в обычную форму data.frame.

str(y)
#'data.frame':  10 obs. of  9 variables:
# $ member_id    : chr  "A000055" "A000361" "A000367" "A000369" ...
# $ name         : chr  "Robert B. Aderholt" "Rodney Alexander" "Justin Amash" "Mark Amodei" ...
# $ party        : chr  "R" "R" "R" "R" ...
# $ state        : chr  "AL" "LA" "MI" "NV" ...
# $ district     : chr  "4" "5" "3" "2" ...
# $ vote_position: chr  "No" "Yes" "No" "Yes" ...
# $ dw_nominate  : num  0.361 0.331 0.649 0.376 -0.297 0.584 0.387 -0.123 0.277 0.485
#$ bill_num     : chr  "S47" "S47" "S47" "S47" ...
# $ bill_title   : chr  "Violence Against Women Reauthorization Act of 2013" "Violence Against Women Reauthorization Act of 2013" "Violence Against Women Reauthorization Act of 2013" "Violence Against Women Reauthorization Act of 2013" ...

Если у нас есть список нескольких длин, мы можем использовать unnest и передавать диапазон столбцов.

library(tidyr)
library(dplyr)

z <- y %>% 
       unnest(cols = member_id:district)  %>%
       type.convert(as.is = TRUE) %>%
       arrange(desc(district))

Мы можем использовать arrange(district), чтобы отсортировать их в порядке возрастания.

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