Esperaba que alguien pudiera ayudarme con un problema que tengo. Tengo una respuesta json que está en formato de lista.

La estructura es una lista. Dentro de cada lista hay una columna de jugadores. Está anidado dentro de cada lista como tal

df[[1]]$body$wildcards$players

La columna players es un df anidado dentro de cada lista. ¿Cómo vincularía la columna de jugadores anidada df para la lista completa?

Reprex de la captura de pantalla a continuación.

sample <- list(
  list(
    body = list(
      wildcards = list(
        players = data.frame(
          firstname = c("Fernando", "Jon"),
          throws = c("L", "R")
        )
      ),
      statusMessage = "OK",
      statusCode = 200
    )
  ),
  list(
    body = list(
      wildcards = list(
        players = data.frame(
          firstname = c("Eduardo", "James"),
          throws = c("L", "R")
        )
      ),
      statusMessage = "OK",
      statusCode = 200
    )
  )
)

Aquí hay una captura de pantalla de la estructura: JSON

Salida df

tibble::tribble(
  ~firstname, ~throws,
  "Fernando",     "L",
       "Jon",     "R",
   "Eduardo",     "L",
     "James",     "R"
  )
1
Jazzmatazz 4 may. 2020 a las 21:29

2 respuestas

La mejor respuesta

Podemos usar pluck con map

library(purrr)
map_dfr(sample, ~ pluck(.x, 'body', 'wildcards','players'))
#  firstname throws
#1  Fernando      L
#2       Jon      R
#3   Eduardo      L
#4     James      R
1
akrun 4 may. 2020 a las 20:20

Suponiendo que tiene los mismos nombres de columna en cada marco de datos:

library(data.table)
new_df <- rbindlist(lapply(df,function(x)x$body$wildcards$players),use.names=T,fill=T)

Tenga en cuenta que no tiene el mismo número de columnas en cada df, por lo que con el argumento fill=T tendrá NA s en su marco de datos.

Esto resuelve tu problema ?

1
Leon Ipdjian 4 may. 2020 a las 18:53