如何使用R中的getSymbols处理雅虎财务代码中的破折号?

问题描述 投票:2回答:1

很少了解R.尝试调整一些代码来完成任务。然而,在自动收报机中遇到了破折号。

symbol.vec=c("BTC-USD","ETH-USD")
getSymbols(symbol.vec,from="2015-08-07",to="2017-12-16")

BTC = BTC-USD[,"BTC-USD.Adjusted",drop=F]

错误:找不到对象'USD'

显然,破折号被视为减号。如何更改数据框的名称以便我可以引用它们?

r quantmod
1个回答
2
投票

R对象或列名称中的虚线不合法。为避免错误,您需要将非法名称括在反引号中。如果您执行以下操作,您的代码将起作用:

BTC = `BTC-USD`[ , "BTC-USD.Adjusted", drop=F]

引号将用于在大括号内建立索引,因此只需要在反引号中包含对象的引用。但是,要使用美元符号表示法,您还需要对列名称进行反引号,给出这个令人厌恶的代码:

`BTC-USD`$`BTC-USD.Adjusted`

通常最好使用合法的列名称,并在输出到图形,表格等时仅更改为“真实世界”的名称。

作为一个新的R用户,更直观和透明的方法来更改对象和列名称可能只是为每个符号显式重命名数据。我们将从连字符切换到下划线,因为下划线是合法的:

# Change name of object to legal name
BTC_USD = `BTC-USD`

# Change column names to legal names
names(BTC_USD) = gsub("-", "_", names(BTC_USD))

更有效但不太直观和透明的方法是将数据放入列表并在列表上操作:

# Put data into a list; one symbol per list element
dat = mget(symbol.vec)

names(dat)
lapply(dat, head)
> names(dat)
[1] "BTC-USD" "ETH-USD"

> lapply(dat, head)
$`BTC-USD`
           BTC-USD.Open BTC-USD.High BTC-USD.Low BTC-USD.Close BTC-USD.Volume BTC-USD.Adjusted
2015-08-06       278.00       279.60      274.28        277.89       11919665           277.89
2015-08-07       277.89       278.92      257.42        258.60       22308123           258.60
2015-08-08       258.60       266.75      258.56        263.87       15154749           263.87
2015-08-09       263.87       266.63      260.52        263.30       12873441           263.30
2015-08-10       263.30       269.90      261.44        269.03       13681939           269.03
2015-08-11       269.03       271.50      263.66        267.66       15232934           267.66

$`ETH-USD`
           ETH-USD.Open ETH-USD.High ETH-USD.Low ETH-USD.Close ETH-USD.Volume ETH-USD.Adjusted
2015-08-06       0.6747         3.00      0.6747          3.00            371             3.00
2015-08-07       3.0000         3.00      0.1500          1.20           1438             1.20
2015-08-08       1.2000         1.20      1.2000          1.20              0             1.20
2015-08-09       1.2000         1.20      1.2000          1.20              0             1.20
2015-08-10       1.2000         1.20      0.6504          0.99           7419             0.99
2015-08-11       0.9900         1.29      0.9050          1.29           2376             1.29
# Rename list elements and columns to legal names
names(dat) = gsub("-", "_", names(dat))
dat = lapply(dat, function(x) setNames(x, gsub("-","_", names(x))))

names(dat)
lapply(dat, head)
> names(dat)
[1] "BTC_USD" "ETH_USD"

> lapply(dat, head)
$BTC_USD
           BTC_USD.Open BTC_USD.High BTC_USD.Low BTC_USD.Close BTC_USD.Volume BTC_USD.Adjusted
2015-08-06       278.00       279.60      274.28        277.89       11919665           277.89
2015-08-07       277.89       278.92      257.42        258.60       22308123           258.60
2015-08-08       258.60       266.75      258.56        263.87       15154749           263.87
2015-08-09       263.87       266.63      260.52        263.30       12873441           263.30
2015-08-10       263.30       269.90      261.44        269.03       13681939           269.03
2015-08-11       269.03       271.50      263.66        267.66       15232934           267.66

$ETH_USD
           ETH_USD.Open ETH_USD.High ETH_USD.Low ETH_USD.Close ETH_USD.Volume ETH_USD.Adjusted
2015-08-06       0.6747         3.00      0.6747          3.00            371             3.00
2015-08-07       3.0000         3.00      0.1500          1.20           1438             1.20
2015-08-08       1.2000         1.20      1.2000          1.20              0             1.20
2015-08-09       1.2000         1.20      1.2000          1.20              0             1.20
2015-08-10       1.2000         1.20      0.6504          0.99           7419             0.99
2015-08-11       0.9900         1.29      0.9050          1.29           2376             1.29
© www.soinside.com 2019 - 2024. All rights reserved.