Из этого процесса:
library(jsonlite)
library(httpuv)
library(httr)
i<-1
results3 <- list();
for (a in 1:2) {
getURL = paste0("https://api.github.com/search/commits?q=sentimentcommitter-date:2000-01-01..2023-01-20&sort=committer-date&order=asc&per_page=100&page = ",a)
req <- GET(getURL)
data <- content(req)
results3[[i]] <- data$items
i <- i + 1
print(i)
}
Как можно преобразовать результат списка результатов3 в фрейм данных, в котором 200 строк и 117 столбцов, как здесь df <- jsonlite::fromJSON(results_json, simplifyDataFrame = TRUE, flatten = TRUE) и length(df$items[[1]])
Может быть, немного странно. Но сначала создание json, которое затем сглаживается, а затем привязка их к DF приносит желаемый результат.
js <- jsonlite::toJSON(results3)
df <- jsonlite::fromJSON(js, simplifyDataFrame = TRUE, flatten = TRUE)
ddf <- rbind(df[[1]], df[[2]])
class(ddf)
# [1] "data.frame"
dim(ddf)
# [1] 200 117
Обновлять На ваш комментарий: вы также можете использовать bind_rows из dplyr:
ddf <- df |> bind_rows()
class(ddf)
#[1] "data.frame"
dim(ddf)
#[1] 200 117
Спасибо, если есть еще вариант а не только 2 можно ли сделать эту модификацию?
Да, это должно работать для большего количества опций. Вы должны принять rbind.
Спасибо, но если у меня 300 случаев df[[i]] как мне написать, чтобы не было 300 случаев
@Erik Brole: я обновил свой ответ альтернативным способом bind_rows()
Per_page=10 для тестирования (т.е. всего 20 строк), jsonlite также может обрабатывать URL-адреса самостоятельно:
url <- "https://api.github.com/search/commits?q=sentimentcommitter-date:2000-01-01..2023-01-20&sort=committer-date&order=asc&per_page=10&page = "
commits <- lapply(1:2,
\(page) jsonlite::fromJSON(paste0(url, page),
simplifyVector =TRUE,
flatten = TRUE)$items) |>
do.call(rbind, args = _)
Полученные результаты:
tibble::glimpse(commits)
#> Rows: 20
#> Columns: 117
#> $ url <chr> "https://api.github.com/repos/dsp…
#> $ sha <chr> "e8f884162cbba5c890bec7a002a9e758…
#> $ node_id <chr> "MDY6Q29tbWl0MTQ1OTE2NzM4OmU4Zjg4…
#> $ html_url <chr> "https://github.com/dspinellis/li…
#> $ comments_url <chr> "https://api.github.com/repos/dsp…
#> $ parents <list> [<data.frame[1 x 3]>], [<data.fr…
#> $ score <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
#> $ commit.url <chr> "https://api.github.com/repos/dsp…
#> $ commit.message <chr> "USB HCD: avoid duplicate local_i…
#> ...
Created on 2023-02-22 with reprex v2.0.2
Есть ли что-то еще, что я должен уточнить?