Поиск и замена в списке строк — gsub eapply?

Вот упрощенный фрагмент моего кода для воспроизведения:

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, но безуспешно - не могу понять соответствующий синтаксис. Любая помощь будет оценена по достоинству. Спасибо.


person Adam Parker    schedule 11.11.2016    source источник
comment
Это простой поиск и замена в списке строк, вы не должны указывать «quantmod» в заголовке; также среда, в которой вы это делаете, не имеет значения.   -  person smci    schedule 11.11.2016


Ответы (2)


Использование as.list и gsub:

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)
person Silence Dogood    schedule 11.11.2016
comment
Спасибо - мне нравится этот метод для решения моей проблемы, он отлично работает, и я ценю подробное объяснение. - person Adam Parker; 11.11.2016
comment
Рады помочь, также посмотрите library(PerformanceAnalytics) для расширенной статистики и функций построения графиков. - person Silence Dogood; 11.11.2016

Вместо использования базовых функций 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", "")))
person FXQuantTrader    schedule 11.11.2016
comment
Спасибо за отзыв! Я решил использовать решение Osssan, так как предпочитаю несколько шагов — мне легче поддерживать и комментировать, так как я все еще новичок! - person Adam Parker; 11.11.2016