#r #file #import #rvest
#r #файл #импорт #rvest
Вопрос:
Я хочу импортировать 100 текстовых файлов с веб-сайта, но как мне преобразовать их в нужный мне формат. Вот пример данных:
NOTE: futures symbols begin with the character @
index symbols begin with the character $
Symbol (option symbols) hv20 hv50 hv100 DATE curiv Days/Percentile Close
****************************************************************
* Data generated by McMillan Analysis Corp. Copyright 2019 *
* www.optionstrategist.com 800-724-1817 *
****************************************************************
$BKX 22 18 22 190211 21.42 15/ 20%ile 91.76
$DJX 10 11 20 190322 16.24 600/ 84%ile 255.02
$HGX 16 15 23 190322 22.61 378/ 70%ile 286.36
$MNX
файлы взяты с веб-сайта подписки и сохранены в виде текста, например.
vh_sym_20190322, если кто-нибудь может мне помочь, я был бы признателен.
Мне не только нужно загружать объемные текстовые файлы, но затем мне нужно обработать их так, чтобы у меня были только заголовки, например. «Symbol», «hv28» и т.д., А также данные с символами и цифрами, например. «$ BKX», «22» и т.д., Еще раз спасибо всем, кто может предложить помощь.
PS. Я подписываюсь на данные этой компании.
Комментарии:
1. Очень маловероятно, что вы использовали бы либо
Rvest
либоread.txt
. (Правописание имеет решающее значение при указании компьютерам, что делать.) Я бы использовалreadLines
, чтобы перевести их в R, а затемread.fwf
, как только вы удалите весь crud.
Ответ №1:
Предполагая, что файл точно такой, это работает:
cn <- read.fwf("~/Downloads/foo.txt", c(34, 4, 6, 6, 8, 8, 16, 6), skip=3, comment.char="*", header=F, n=1)
cn
# V1 V2 V3 V4 V5 V6 V7
# 1 Symbol (option symbols) hv20 hv50 hv100 DATE curiv Days/Percentile
# V8
# 1 Close
cn <- make.names(trimws(unlist(cn)))
cn
# [1] "Symbol..option.symbols." "hv20" "hv50"
# [4] "hv100" "DATE" "curiv"
# [7] "Days.Percentile" "Close"
dat <- read.fwf("~/Downloads/foo.txt", c(34, 4, 6, 6, 8, 8, 16, 6), skip=4, comment.char="*", header=FALSE)
colnames(dat) <- cn
str(dat)
# 'data.frame': 3 obs. of 8 variables:
# $ Symbol..option.symbols.: Factor w/ 3 levels "$BKX ",..: 1 2 3
# $ hv20 : int 22 10 16
# $ hv50 : int 18 11 15
# $ hv100 : int 22 20 23
# $ DATE : int 190211 190322 190322
# $ curiv : num 21.4 16.2 22.6
# $ Days.Percentile : Factor w/ 3 levels " 15/ 20%ile ",..: 1 3 2
# $ Close : num 91.8 255 286.4
Возможно, вы захотите обновить имена столбцов и / или включить stringsAsFactors=FALSE
. После этого у вас будет небольшая очистка данных, например, Days.Percentile
похоже, что объединенная ячейка была менее тривиальной для очистки только при чтении с фиксированной шириной.
Комментарии:
1. Это отлично работает, за исключением того, что там было 21 строка мусора, она была урезана до 3 при вставке в stack overflow, хотя таблица правильная, но у меня все еще есть около 17 строк мусора,
2. cn <- read.fwf(«~/2_R Библиотека и код /RWorkFiles/McMillan Volatility/vh_sym_20190322.txt «, c(34, 4, 6, 6, 8, 8, 16, 6), пропустить = 21, комментарий.char = » «, заголовок = F, n =1) cn cn <- make.names(trimws(unlist(cn))) cn # [1] «Символ..опция.символы». «hv20» dat <- read.fwf(«~/2_R Библиотека и код /RWorkFiles/McMillan Volatility/vh_sym_20190322.txt «, c(34, 4, 6, 6, 8, 8, 16, 6), пропустить = 4, комментарий.char = » «, заголовок = FALSE) имена столбцов (dat) <- cn str(dat)
3. Вот мусор
4. 1 hv50: 50-дневная историческая волатильность NA NA NA NA NA NA NA NA 2 hv100: 100-дневная историческая волатильность NA NA NA NA NA NA NA 3 ДАТА: дата последних данных по ОПЦИОНУ NA NA NA NA NA NA NA NA 4 (опционы не торгуются каждый день для каждого базового варианта NA NA 5 cur_iv: подразумеваемая волатильность выбранных вариантов на ДАТУ NA NA NA NA 6 Дней: количество дней назад, для которых было изменено значение в олатилит у вас есть
5. нет, я не хотел оставлять без ответа, я просто нажал на нее, и она не изменилась бы обратно.