Открытие .bcp файлов в R - PullRequest
       16

Открытие .bcp файлов в R

0 голосов
/ 06 сентября 2018

Я пытался преобразовать данные британской благотворительной комиссии в формате .bcp в формат .csv, который затем можно было бы прочитать в R. Данные, на которые я ссылаюсь, доступны здесь: http://data.charitycommission.gov.uk/. Что Я пытаюсь сделать, это превратить эти файлы .bcp в пригодные для использования кадры данных, которые я могу очистить и выполнить анализ в R.

На этой странице github есть предложения о том, как сделать это через python https://github.com/ncvo/charity-commission-extract, но, к сожалению, я не смог заставить эти опции работать.

Мне интересно, есть ли какой-нибудь синтаксис или пакеты, которые позволят мне открыть эти данные непосредственно в R? Я не смог найти ни одного.

Другой вариант - просто открыть файлы в R как один символьный вектор, используя readLines. Я сделал это, и файлы разделены с @**@ для столбцов и *@@* для строк. (См. Здесь: http://data.charitycommission.gov.uk/data-definition.aspx). Существует ли команда R, которая позволила бы мне создать кадр данных из длинной символьной строки, определяющей ограничители для строк и столбцов?

1 Ответ

0 голосов
/ 06 сентября 2018

R-решение

отредактированная версия

Не уверен, что все .bcp файлы имеют одинаковый формат. Я скачал упомянутый вами набор данных и попытался найти решение для наименьшего файла; extract_aoo_ref.bcp

library(data.table)

#read the file as-is
text <- readChar("./extract_aoo_ref.bcp", 
                 nchars = file.info( "./extract_aoo_ref.bcp" )$size, 
                 useBytes = TRUE)
#replace column and row separator
text <- gsub( ";", ":", text)
text <- gsub( "@\\*\\*@", ";", text)
text <- gsub( "\\*@@\\*", "\n", text, perl = TRUE)
#read the results
result <- data.table::fread( text, 
                             header = FALSE, 
                             sep = ";", 
                             fill = TRUE, 
                             quote = "", 
                             strip.white = TRUE)

head(result,10)

#    V1 V2                           V3                                           V4 V5 V6
# 1:  A  1 THROUGHOUT ENGLAND AND WALES At least 10 authorities in England and Wales  N NA
# 2:  B  1             BRACKNELL FOREST                             BRACKNELL FOREST  N NA
# 3:  D  1                  AFGHANISTAN                                  AFGHANISTAN  N  2
# 4:  E  1                       AFRICA                                       AFRICA  N NA
# 5:  A  2           THROUGHOUT ENGLAND      At least 10 authorities in England only  N NA
# 6:  B  2               WEST BERKSHIRE                               WEST BERKSHIRE  N NA
# 7:  D  2                      ALBANIA                                      ALBANIA  N  3
# 8:  E  2                         ASIA                                         ASIA  N NA
# 9:  A  3             THROUGHOUT WALES        At least 10 authorities in Wales only  Y NA
# 10:  B  3                      READING                                      READING  N NA

то же самое для хитрого файла; extract_charity.bcp

head(result[,1:3],10)
#       V1 V2                                                                                 V3
# 1: 200000  0                                                          HOMEBOUND CRAFTSMEN TRUST
# 2: 200001  0                                                          PAINTERS' COMPANY CHARITY
# 3: 200002  0                                              THE ROYAL OPERA HOUSE BENEVOLENT FUND
# 4: 200003  0                                                          HERGA WORLD DISTRESS FUND
# 5: 200004  0 THE WILLIAM GOLDSTEIN LAY STAFF BENEVOLENT FUND (ROYAL HOSPITAL OF ST BARTHOLOMEW)
# 6: 200005  0                              DEVON AND CORNWALL ROMAN CATHOLIC DEVELOPMENT SOCIETY
# 7: 200006  0                                                    THE HORLEY SICK CHILDREN'S FUND
# 8: 200007  0                                            THE HOLDENHURST OLD PEOPLE'S HOME TRUST
# 9: 200008  0                                                         LORNA GASCOIGNE TRUST FUND
# 10: 200009  0                                          THE RALPH LEVY CHARITABLE COMPANY LIMITED

так .. похоже, что оно работает:)

...