我是否使用Rvest或read.txt()函数以及如何处理以下数据

时间:2019-03-24 23:55:25

标签: r file import 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 个答案:

答案 0 :(得分:0)

假设文件就是这样,这可行:

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似乎是一个组合单元,仅使用固定宽度读取就不那么容易清理了。