很少了解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'
显然,破折号被视为减号。 如何更改数据框的名称以便我可以引用它们?
答案 0 :(得分:2)
D对象在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