首页 > 解决方案 > 如何使用 csv 查找文件替换数据集中的列名

问题描述

我正在使用RStudio并且正在运行以下R代码(检索股票价格):

if (!require(BatchGetSymbols)) install.packages('BatchGetSymbols')

library(BatchGetSymbols)

# set dates
first.date <- Sys.Date() - 60
last.date <- Sys.Date()
freq.data <- 'daily'
# set tickers
tickers <- c('AAPL','BIDU')

l.out <- BatchGetSymbols(tickers = tickers, 
                         first.date = first.date,
                         last.date = last.date, 
                         freq.data = freq.data,
                         cache.folder = file.path(tempdir(), 
                                                  'BGS_Cache') ) # cache in tempdir()
library(ggplot2)

p <- ggplot(l.out$df.tickers, aes(x = ref.date, y = price.close))
p <- p + geom_line()
p <- p + facet_wrap(~ticker, scales = 'free_y') 
print(p)

的输出p如下所示:

ggplot2 截图

我希望ggplot2图表显示公司名称而不是股票代码。(即APPLE代替“AAPL”,BAIDU代替“BIDU”)。

我有一个csv文件,其中包含代码名称(股票代码)及其相关公司名称的列表。如何用公司名称替换​​代码,以便它们显示在我的ggplot2图表中?

我尝试了以下方法(仍然给出与以前相同的图表):

if (!require(BatchGetSymbols)) install.packages('BatchGetSymbols')

library(BatchGetSymbols)

# set dates
first.date <- Sys.Date() - 60
last.date <- Sys.Date()
freq.data <- 'daily'
# set tickers
tickers <- c('AAPL','BIDU')

l.out <- BatchGetSymbols(tickers = tickers, 
                         first.date = first.date,
                         last.date = last.date, 
                         freq.data = freq.data,
                         cache.folder = file.path(tempdir(), 
                                                  'BGS_Cache') ) # cache in tempdir()

codes_list <- read.csv("codes_list.csv", stringsAsFactors=FALSE)

codes_list$code <- as.character(codes_list$code)
codes_list$desc <- as.character(codes_list$desc)
rownames(codes_list) <- codes_list$code
replaced <- names(l.out$df.tickers) %in% codes_list$code
names(l.out$df.tickers)[replaced] <- codes_list[names(l.out$df.tickers)[replaced], "desc"]


library(ggplot2)

p <- ggplot(l.out$df.tickers, aes(x = ref.date, y = price.close))
p <- p + geom_line()
p <- p + facet_wrap(~ticker, scales = 'free_y') 
print(p)

“codes_list.csv”文件的摘录如下所示:

code       desc
AAPL       APPLE
BIDU       BAIDU

我根据此处提供的解决方案尝试了上述方法:Replace column name by reference a table file in R

标签: rggplot2

解决方案


我将对这两个数据集进行连接以获得相应的 desc。

require(dplyr)
require(ggplot2)

codes_list <- read.csv("codes_list.csv", stringsAsFactors=FALSE)

inner_join(l.out$df.tickers, codes_list, by = c('ticker' = 'code')) %>% 
  ggplot(aes(x = ref.date, y = price.close)) + 
  geom_line() +
  facet_wrap(~desc, scales = 'free_y') 

让我知道这是否有帮助!

编辑:l.out是一个列表,相关对象是l.out$df.tickers


推荐阅读