我正在尝试读取CSV文件,但我遇到了以下错误。
Error in scan(file = file, what = what, sep = sep, quote = quote, dec = dec, :
line 1097 did not have 5 elements
在进一步检查CSV文件后,我发现在第1097行附近有一个中断行并开始一个带有年度数据的新标题(我现在对每月感兴趣)。
temp <- tempfile()
download.file("http://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/F-F_Research_Data_Factors_CSV.zip",temp, mode="wb")
unzip(temp, "F-F_Research_Data_Factors.CSV")
French <- read.table("F-F_Research_Data_Factors.CSV", sep=",", skip = 3, header=T, nrows = 100)
以上代码下载zip文件并将CSV文件导入R中,前100行完美无缺。然而,前100行(为了说明目的)是20世纪20年代和30年代的数据点,这不是我特别感兴趣的。
我的问题是,如何从第一个逗号分隔的CSV文件中的值导入数据,即192607(1926-07),直到说195007(1950-07) - 我能够通过更改导入最新的值nrow = 1095但这不是我想要实现的目标。
数据快照;
,Mkt-RF,SMB,HML,RF
192607, 2.96, -2.30, -2.87, 0.22
192608, 2.64, -1.40, 4.19, 0.25
192609, 0.36, -1.32, 0.01, 0.23
......第1100行
Annual Factors: January-December
,Mkt-RF,SMB,HML,RF
1927, 29.47, -2.46, -3.75, 3.12
1928, 35.39, 4.20, -6.15, 3.56
答案 0 :(得分:2)
我使用read.csv
代替read.table
French <- read.csv("F-F_Research_Data_Factors.CSV", sep = ",", skip = 3,
header = T )
并获得1188次观察。我认为您可以从这里对数据集进行子集化。
答案 1 :(得分:1)
文件中的第一个表位于前两个零长度行之间,因此这将在没有前后垃圾的情况下读取它,然后在指定日期对其进行子集化:
# read first table in file
Lines <- readLines("F-F_Research_Data_Factors.CSV")
ix <- which(Lines == "")
DF0 <- read.csv(text = Lines[ix[1]:ix[2]]) # all rows in first table
# subset it to indicated dates
DF <- subset(DF0, X >= 192607 & X <= 195007)
注意:如果我们想要显示所有表格,以逗号开头的行开始每个表格,空白行结束它们(除了第一个空白行在表格之前),所以使用{{1}从上面给出一个列表Lines
,其第i个组件是文件中的第i个表。
L