gpt4 book ai didi

r - 如何使用 R 中的 getSymbols 处理雅虎金融股票代码中的破折号?

转载 作者:行者123 更新时间:2023-12-03 23:17:28 98 4
gpt4 key购买 nike

对 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]

Error: object 'USD' not found



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

最佳答案

破折号在 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

关于r - 如何使用 R 中的 getSymbols 处理雅虎金融股票代码中的破折号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47852197/

98 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com