【问题标题】:How to replace column names in data set using a csv lookup file如何使用 csv 查找文件替换数据集中的列名
【发布时间】:2020-12-18 19:17:47
【问题描述】:

我正在使用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 图表显示公司名称而不是股票代码。 (即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 referring to a table file in R

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    我会对这两个数据集进行连接以获得相应的描述。

    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

    【讨论】:

    • 我收到以下错误:UseMethod("inner_join") 中的错误:没有适用于“inner_join”的方法应用于“list”类的对象。我猜那是因为“l.out”是一个列表。
    • 好的,您的回答帮助我找到了错误。在您的:inner_join 代码中,它应该是“l.out$df.tickers”和“codes_list”而不是“code_list”。请在您的建议中做出相应的更正,我将投票。再次感谢您的帮助!
    • 感谢您指出这一点。我已经编辑了我的答案以反映这一点。如果能接受就好了。很高兴它有帮助!
    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2022-07-23
    • 1970-01-01
    • 2014-04-08
    • 2016-11-10
    相关资源
    最近更新 更多