R eapply在环境中的数据帧列上应用

R eapply在环境中的数据帧列上应用,r,R,我试图在一个环境中执行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"

我试图在一个环境中执行
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
我怎样才能修改代码使其正常工作

数据:

这给了我一个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))

})
数据%
重命名所有(函数(n){
gsub(“^(\\w+\ \”,”,n,perl=TRUE)
})
lappy(x,2,函数(z)ifelse(z$close>=z$open,1,0))
})

这是有效的:使用
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)
        })
}))
dataEnv%
重命名所有(函数(n){
gsub(“^(\\w+\ \”,”,n,perl=TRUE)
})
}))

这是有效的:使用
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)
        })
}))
dataEnv%
重命名所有(函数(n){
gsub(“^(\\w+\ \”,”,n,perl=TRUE)
})
}))

使用base 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
#....
eapply(dataEnv,函数(x){

df使用base 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
#....
eapply(dataEnv,函数(x){

df使用
stringi::stri_replace
stringr::str_replace
替代。使用
stringi::stri_replace
stringr::str_replace
替代。这很好,无论如何我可以将数据保存在
env
中?我想运行的下一行是
数据谢谢!你帮了不少忙,我已经对orig进行了编辑最后一篇文章展示了我试图实现的目标(最终)。这太棒了,无论如何我可以将数据保存在
env
?我想运行的下一行是
数据谢谢!你帮了很多忙,我对原始文章进行了编辑,展示了我试图实现的目标(最终)。