【问题标题】:Search-and-replace on a list of strings - gsub eapply?在字符串列表上搜索和替换 - gsub eapply?
【发布时间】:2016-11-11 04:17:21
【问题描述】:

这是我的代码的简化摘录,用于复制目的:

library("quantmod")
stockData <- new.env()
stocksLst <- c("AAB.TO", "BBD-B.TO", "BB.TO", "ZZZ.TO")
nrstocks = length(stocksLst)
startDate = as.Date("2016-09-01")

for (i in 1:nrstocks) {
    getSymbols(stocksLst[i], env = stockData, src = "yahoo", from = startDate)
}

然后我的数据存储在这个环境 stockData 中,我用它来做一些分析。我想清理 xts 对象的名称,目前是:

ls(stockData)
[1] "AAB.TO"   "BB.TO"    "BBD-B.TO" "ZZZ.TO"

我想从所有名称中删除 - 和 .TO,并尝试使用 gsub 和 eapply,但没有任何成功 - 无法找出合适的语法。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 这是对字符串列表的简单搜索和替换,您不应该在标题中添加“quantmod”;您执行此操作的环境也无关紧要。

标签: r replace gsub quantmod string-substitution


【解决方案1】:

使用as.listgsub

library("quantmod")
stockData <- new.env()
stocksLst <- c("AAB.TO", "BBD-B.TO", "BB.TO", "ZZZ.TO")
nrstocks = length(stocksLst)
startDate = as.Date("2016-09-01")

for (i in 1:nrstocks) {
    getSymbols(stocksLst[i], env = stockData, src = "yahoo", from = startDate)
}

ls(stockData)
# [1] "AAB.TO"   "BB.TO"    "BBD-B.TO" "ZZZ.TO"

#convert to list for ease in manipulation
stockData = as.list(stockData)

#find . and replace everything after it with ""

names(stockData)=  gsub("[.].*$","",names(stockData))

#alternately you could match pattern .TO exactly and replace with ""

#names(stockData)=  gsub("[.]TO$","",names(stockData))

ls(stockData)
# [1] "AAB"   "BB"    "BBD-B" "ZZZ"  

#convert back to env 
list2env(stockData)

【讨论】:

  • 谢谢 - 我喜欢这种方法来解决我的问题,效果很好,我感谢详细的解释。
  • 乐于提供帮助,也请查看library(PerformanceAnalytics) 了解高级统计数据和图表功能
【解决方案2】:

在学习 R 时,不要使用 gsub?regex 之类的基本 R 函数,您可能会发现使用库 stringr 中的函数对字符串进行操作要容易得多。你可以使用str_replace:

library(stringr)
e.stocks <- list2env(setNames(lapply(stocksLst, function(x) y <- getSymbols(x, env = NULL)), 
                     str_replace(str_replace(stocksLst, "-", ""), "\\.TO", "")))

【讨论】:

  • 感谢您的意见!我决定使用 Osssan 的解决方案,因为我更喜欢多个步骤 - 因为我还是个菜鸟,所以我更容易维护和评论!
猜你喜欢
  • 1970-01-01
  • 2015-09-10
  • 2018-01-02
  • 2015-05-02
  • 1970-01-01
  • 2015-10-03
  • 1970-01-01
相关资源
最近更新 更多