2016-11-11 7 views
1

Вот упрощенная выдержка из моего кода для целей воспроизводства:Поиск и замена в списке строк - 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, без каких-либо успехов, не может определить соответствующий синтаксис. Любая помощь будет оценена по достоинству. Благодарю.

+1

Это простой поиск и замену в списке строк, вы не должны ставить «quantmod» в названии; также окружающая среда, в которой вы делаете это, не имеет значения. – smci

ответ

1

Использование 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) 
+0

Спасибо - мне нравится этот метод для решения моей проблемы, отлично работает, и я ценю подробное объяснение. –

+0

Благодарим за помощь, а также посмотрим на библиотеку (PerformanceAnalytics) 'для расширенной статистики и функций построения диаграмм. – OdeToMyFiddle

1

Вместо того, чтобы использовать базовые функции 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", ""))) 
+0

Спасибо за ввод! Я решил использовать решение Osssan, поскольку я предпочитаю несколько шагов - мне легче поддерживать и комментировать, поскольку я все еще ноб! –