Я хочу создать карту в списке внутри data.frame, связать строки и повторить идентификатор столбца за один шаг.
Я смог выполнить каждую часть вручную, но не смог сделать это за один шаг, если есть какая-либо функция или особый способ использования функций отображения.
Заголовок данных:
data <- structure(list(mecanicas = list(structure(list(name = c("Campaign / Battle Card Driven",
"Cooperative Play", "Grid Movement", "Hand Management", "Modular Board",
"Role Playing"), objecttype = c("property", "property", "property",
"property", "property", "property"), objectid = c("2018", "2023",
"2676", "2040", "2011", "2028"), primarylink = c(0L, 0L, 0L,
0L, 0L, 0L), itemstate = c("approved", "approved", "approved",
"approved", "approved", "approved"), href = c("/boardgamemechanic/2018/campaign-battle-card-driven",
"/boardgamemechanic/2023/cooperative-play", "/boardgamemechanic/2676/grid-movement",
"/boardgamemechanic/2040/hand-management", "/boardgamemechanic/2011/modular-board",
"/boardgamemechanic/2028/role-playing")), class = "data.frame", row.names = c(NA,
6L)), structure(list(name = c("Action Point Allowance System",
"Cooperative Play", "Hand Management", "Point to Point Movement",
"Set Collection", "Trading"), objecttype = c("property", "property",
"property", "property", "property", "property"), objectid = c("2001",
"2023", "2040", "2078", "2004", "2008"), primarylink = c(0L,
0L, 0L, 0L, 0L, 0L), itemstate = c("approved", "approved", "approved",
"approved", "approved", "approved"), href = c("/boardgamemechanic/2001/action-point-allowance-system",
"/boardgamemechanic/2023/cooperative-play", "/boardgamemechanic/2040/hand-management",
"/boardgamemechanic/2078/point-point-movement", "/boardgamemechanic/2004/set-collection",
"/boardgamemechanic/2008/trading")), class = "data.frame", row.names = c(NA,
6L)), structure(list(name = c("Action Point Allowance System",
"Auction/Bidding", "Card Drafting"), objecttype = c("property",
"property", "property"), objectid = c("2001", "2012", "2041"),
primarylink = c(0L, 0L, 0L), itemstate = c("approved", "approved",
"approved"), href = c("/boardgamemechanic/2001/action-point-allowance-system",
"/boardgamemechanic/2012/auctionbidding", "/boardgamemechanic/2041/card-drafting"
)), class = "data.frame", row.names = c(NA, 3L)), list()),
title = c("Gloomhaven", "Pandemic Legacy: Season 1", "Through the Ages: A New Story of Civilization",
"KLASK")), row.names = c(NA, -4L), class = c("tbl_df", "tbl",
"data.frame"))
Состав:
mecanicas title
<list> <chr>
1 <data.frame [6 x 6]> Gloomhaven
2 <data.frame [6 x 6]> Pandemic Legacy: Season 1
3 <data.frame [3 x 6]> Through the Ages: A New Story of Civilization
4 <list [0]> KLASK
То, как я это делаю и хочу упростить:
library('tidyverse')
### map and bind the rows
mechanics_binded <- map_dfr(data$mecanicas, bind_rows)
### then count the mechanics for repetition
n_mecs <- lapply(data[['mecanicas']], nrow) %>% as.character() %>% as.numeric()
##(some lists can be empty, but none in the data sample)
n_mecs[is.na(n_mecs)] <- 0
titles <- rep(data$title, n_mecs)
mechanics_binded$titles <- titles
mechanics <- mechanics_binded [,c('name', 'jogos')]
mechanics
Желаемый результат:
name title
1 Campaign / Battle Card Driven Gloomhaven
2 Cooperative Play Gloomhaven
3 Grid Movement Gloomhaven
4 Hand Management Gloomhaven
5 Modular Board Gloomhaven
6 Role Playing Gloomhaven
7 Action Point Allowance System Pandemic Legacy: Season 1
8 Cooperative Play Pandemic Legacy: Season 1
9 Hand Management Pandemic Legacy: Season 1
10 Point to Point Movement Pandemic Legacy: Season 1
РЕДАКТИРОВАТЬ: столбец mecanicas
также может быть пустым списком, в противном случае он хорошо структурирован.
EDIT2: добавлен один из крайних вариантов из edit1, что список пуст (ошибка в случае решения с изменением направления). Другая ошибка (решение data.table) мне не удалось воспроизвести без целых данных, поэтому я делюсь здесь через ссылку dropbox. https://www.dropbox.com/s/boh8k0epay4gedh/bgg_mechanics.RData?dl=0