如何从R中的csv表中读取数据?

时间:2012-06-16 22:44:20

标签: r quantmod

我有一个csv文件,我想将每一列提取为一个字符串,以便我可以使用getSymbols包中的quantmod函数。

csv文件如下所示:

AEGR,Aegerion Pharmaceuticals Inc
AKS,AK Steel Holding Corp
ALXA‎,Alexza Pharmaceuticals Inc
CCL‎,Carnival Corporation
CECO‎,Career Education Corp
CDXS‎,Codexis Inc

我使用此代码来读取文件:

data<-read.csv(file='CAPM/allquotes.csv',header=F)
symbols=gettext(data[,1])
symbol.names=gettext(data[,2])
getSymbols(symbols)

我收到此错误:

Error in download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m,  : cannot open URL 'http://chart.yahoo.com/table.csv?s=ALXA‎&a=0&b=01&c=2007&d=5&e=16&f=2012&g=d&q=q&y=0&z=ALXA‎&x=.csv'
In addition: Warning message:
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m,  : cannot open: HTTP status was '404 Not Found'

当我逐个输入符号时,它可以正常工作。我也注意到,当我走到最后一行的末尾时,边缘似乎已经腐蚀了。在图像中,您可以看到“符号”的值,该行的末尾是一个比它应该更多的空格(您可以看到,因为初始括号的颜色)。

symbols object

2 个答案:

答案 0 :(得分:4)

你的csv中有隐藏的字符 - 即从左到右的标记。由于您使用的是RStudio,因此可以使用“{0}”作为gsub参数的值,使用pattern将其删除。或者,您可以只保留您想要的字符,而不是删除您不想要的隐藏字符。例如,如果您的符号只有字母和/或数字,则可以使用gsub("[^A-Za-z0-9]", "", data[, 1])

之类的内容
data <- read.csv(text="AEGR,Aegerion Pharmaceuticals Inc
AKS,AK Steel Holding Corp
ALXA‎,Alexza Pharmaceuticals Inc
CCL‎,Carnival Corporation
CECO‎,Career Education Corp
CDXS‎,Codexis Inc", header=FALSE)
#data[, 1] <- gsub("\016", "", data[, 1]) #this should work in RStudio
data[, 1] <- gsub("[^A-Za-z0-9]", "", data[, 1]) #but this should work anywhere
symbols=gettext(data[,1])
getSymbols(symbols, src='yahoo')

read.csv之后,您可以检查data对象,看看有什么不妥。

s <- as.character(data[, 1])
str(s)
#chr [1:6] "AEGR" "AKS" "ALXA""| __truncated__ "CCL""| __truncated__ "CECO""| __truncated__ "CDXS""| __truncated__
str(s[3])
#chr "ALXA""| __truncated__

charToRaw(s[3])
#[1] 41 4c 58 41 e2 80 8e
# Compare what we have to what we think we have
charToRaw("ALXA")
#[1] 41 4c 58 41

答案 1 :(得分:0)

我正在使用使用quantmod的Systematic Investor Toolbox。感谢GSee,解决方案就是这样:

source('SystematicInvestorToolbox.r')
load.packages('quantmod')
dates='2012::2012'
data<-read.csv(file='CAPM/allquotes.csv',header=F,stringsAsFactors=F)
data[, 1] <- gsub("[^A-Za-z0-9]", "", data[, 1])
symbols=gettext(data[,1])
symbol.names=gettext(data[,2])
ia=aa.test.create.ia.custom(symbols,symbol.names,dates)
plot.ia(ia,(1:1))

值得注意的是,当我在'symbol.names'中提取引号名称的字符时,从左到右的标记只出现'符号'。

感谢您的帮助。