применять над столбцами фреймов данных в среде - PullRequest
0 голосов
/ 27 сентября 2019

Я пытаюсь eapply в среде.

Я хочу удалить все "символы" из имен столбцов, поэтому стандартизирую их.

Код, который у меня есть:

eapply(dataEnv, function(x) gsub(paste(symbols, ".", sep = ""), "", colnames(x)))

Я получаю это сообщение:

> eapply(dataEnv, function(x) gsub(paste(symbols, ".", sep = ""), "", colnames(x)))
$AAPL
[1] "AAPL.Open"     "AAPL.High"     "AAPL.Low"      "AAPL.Close"    "AAPL.Volume"   "AAPL.Adjusted"

$GOOG
[1] "Open"     "High"     "Low"      "Close"    "Volume"   "Adjusted"

$MSFT
[1] "MSFT.Open"     "MSFT.High"     "MSFT.Low"      "MSFT.Close"    "MSFT.Volume"   "MSFT.Adjusted"

Warning messages:
1: In gsub(paste(symbols, ".", sep = ""), "", colnames(x)) :
  argument 'pattern' has length > 1 and only the first element will be used
2: In gsub(paste(symbols, ".", sep = ""), "", colnames(x)) :
  argument 'pattern' has length > 1 and only the first element will be used
3: In gsub(paste(symbols, ".", sep = ""), "", colnames(x)) :
  argument 'pattern' has length > 1 and only the first element will be used

Как настроить код, чтобы он заработал?

Данные:

    require(PerformanceAnalytics)
    library(quantmod)
    library(data.table)

from <- "2017-01-01"
to <- "2018-12-01"

symbols <- c('GOOG', 'MSFT', 'AAPL')

dataEnv <- new.env()
getSymbols(symbols, from=from, to = to, src = "yahoo", adjust = TRUE, env = dataEnv) 

eapply(dataEnv, function(x) gsub(paste(symbols, ".", sep = ""), "", colnames(x)))

РЕДАКТИРОВАТЬ:

Я хотел бы выполнить вычисление в среде.

вычисление:

with(dataEnv$GOOG, ifelse(GOOG.Close >= GOOG.Open, 1, 0)) 

Что дает мне результат 0 и 1 с.

Моя текущая попытка это:

data <- eapply(dataEnv, function(x){
  as.data.frame(x) %>% 
    rename_all(function(n){
      gsub("^(\\w+)\\.", "", n, perl = TRUE)
    })
    lapply(x, 2, function(z) ifelse(z$close >= z$open, 1, 0))

})

Ответы [ 2 ]

2 голосов
/ 27 сентября 2019

Это работает: использование dplyr

eapply(dataEnv, function(x){
    as.data.frame(x) %>% 
        rename_all(function(n){
            gsub("^(\\w+)\\.", "", n, perl = TRUE)
        })
})

Примечание: я уверен, что есть лучший способ сделать это, но сейчас я не могу думать о том, как просто применить функцию на месте ине создавать список ... так что обходной путь заключается в пересоздании среды?:

dataEnv <- as.environment(eapply(dataEnv, function(x){
    as.data.frame(x) %>% 
        rename_all(function(n){
            gsub("^(\\w+)\\.", "", n, perl = TRUE)
        })
}))
0 голосов
/ 27 сентября 2019

Используя базу R, мы можем переименовать столбцы и создать новый столбец, сравнивая Open и Close

eapply(dataEnv, function(x){
    df <- as.data.frame(x)
    names(df) <- sub(".*\\.", "", names(df))
    df$new_col <- as.integer(df$Close > df$Open)
    df
})

#$AAPL
#               Open     High      Low    Close    Volume Adjusted new_col
#2017-01-03 112.2816 112.7955 111.2732 112.6210  28781900 111.2870       1
#2017-01-04 112.3301 112.9700 112.2331 112.4949  21118100 111.1624       1
#2017-01-05 112.3979 113.3094 112.2913 113.0670  22193600 111.7277       1
#2017-01-06 113.2318 114.5699 112.9312 114.3275  31751900 112.9733       1
#2017-01-09 114.3663 115.8013 114.3566 115.3747  33561900 114.0081       1
#2017-01-10 115.1614 115.7528 114.7056 115.4910  24462100 114.1230       1
#....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...