Как я могу создать фрейм данных в R из файла zip с несколькими уровнями, расположенными в URL? - PullRequest
0 голосов
/ 09 октября 2019

Я пытался решить это, но я не смог сделать это ...

Я хочу создать фрейм данных с четырьмя столбцами: страна-номер-год- (содержаниеTXT-файл)

.Zip-файл находится по следующему адресу: https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=doi:10.7910/DVN/0TJX8Y/PZUURT

. Файл содержит папку с 49 папками, каждая из которых содержит 150 TXT-файлов. дать или взять.

Сначала я попытался загрузить zip-файл с помощью get_dataset, но не сработал

if (!require("dataverse")) devtools::install_github("iqss/dataverse-client-r")
library("dataverse")
Sys.setenv("DATAVERSE_SERVER" = "dataverse.harvard.edu")
get_dataset("=doi:10.7910/DVN/0TJX8Y/PZUURT", key = "", server = "dataverse.harvard.edu")

"Ошибка в get_dataset (" = doi: 10.7910 / DVN / 0TJX8Y / PZUURT ", key = "", server = "dataverse.harvard.edu"): не найден (HTTP 404). "

Затем я попытался

temp <- tempfile()
download.file("https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=doi:10.7910/DVN/0TJX8Y/PZUURT",temp)
UNGDC <-unzip(temp, "UNGDC+1970-2018.zip")

В какой-то момент это сработало .. Я загрузил файл .zip, а затем создал UNGDC, но ничего не произошло, потому что он содержит только следующую информацию:

UNGDC Соединение с
description "/ var / folder / nl / ss_qsy090l78_tyycy03x0yh0000gn/T//RtmpTc3lvX/fileab730f392b3:UNGDC+1970-2018.zip "class" unz "
mode" r "
text" text "
o«закрыто»
может читать «да»
может писать «да»

Здесь я не знаю, что делать ... Я не нашел соответствующей информации для продолжения. Кто-нибудь может дать мне несколько советов? или любой интернет, чтобы узнать, как это сделать?

Спасибо за ваше внимание и помощь !!!

1 Ответ

0 голосов
/ 09 октября 2019

Как насчет этого? Я использовал пакет zip для распаковки, но, возможно, базовая распаковка также может сработать.

library(zip)
dir.create(temp <- tempfile())
url<-'https://dataverse.harvard.edu/api/access/datafile/:persistentId?persistentId=doi:10.7910/DVN/0TJX8Y/PZUURT'
download.file(url, paste0(temp, '/PZUURT.zip'), mode = 'wb', exdir = temp)
unzip(paste0(temp, '/PZUURT.zip'), exdir = temp)

Обратите внимание, в частности, я должен был установить mode = 'wb', как на компьютере с Windows.

Затем я увидел, что в распакованном архиве есть папка _MACOSX и папка «Преобразованные сеансы». Предполагая, что мне не нужен материал MACOSX, я сделал следующее, чтобы получить только те файлы, которые мне интересны:

root_folder <- paste0(temp,'/Converted sessions/')
filelist <- list.files(path = root_folder, pattern = '*.txt', recursive = TRUE)
filenames <- basename(filelist)

'filelist' содержит полные пути к каждому текстовому файлу, а 'filenames'есть только каждое имя файла, которое я затем разделю, чтобы получить страну, номер и год:

df <- data.frame(t(sapply(strsplit(filenames, '_'), 
                 function(x) c(x[1], x[2], substr(x[3], 1, 4)))))
colnames(df) <- c('Country', 'Number', 'Year')

Наконец, я могу прочитать текст из каждого файла и вставить его вфрейм данных как новое текстовое поле:

df$Text <- sapply(paste0(root_folder, filelist), function(x) readChar(x, file.info(x)$size))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...