我有一个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'
当我逐个输入符号时,它可以正常工作。我也注意到,当我走到最后一行的末尾时,边缘似乎已经腐蚀了。在图像中,您可以看到“符号”的值,该行的末尾是一个比它应该更多的空格(您可以看到,因为初始括号的颜色)。
答案 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'中提取引号名称的字符时,从左到右的标记只出现'符号'。
感谢您的帮助。