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
?我想运行的下一行是数据谢谢!你帮了很多忙,我对原始文章进行了编辑,展示了我试图实现的目标(最终)。