Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 特殊数据帧_R_Xts_Random Forest - Fatal编程技术网

R 特殊数据帧

R 特殊数据帧,r,xts,random-forest,R,Xts,Random Forest,我问了一个问题,跟我昨天在这篇文章中问的一样: 我设法找出了每个季度最重要的技术交易规则。我已经建立了一个数据框来放置这些TTR的名称。给你,我有一个季度专栏 1 2 3 4 5 6 7 8 9 10 11 1 RSI2 RSI3 RSI2 RSI10 RSI2 RSI2 RSI2 RSI2 RSI2

我问了一个问题,跟我昨天在这篇文章中问的一样:

我设法找出了每个季度最重要的技术交易规则。我已经建立了一个数据框来放置这些TTR的名称。给你,我有一个季度专栏

              1       2     3      4       5     6     7       8       9      10           11
1          RSI2    RSI3  RSI2  RSI10    RSI2  RSI2  RSI2    RSI2    RSI2    RSI2         RSI2
2          RSI3    RSI4  RSI3  RSI20    RSI3  RSI3  RSI3    RSI4    RSI4    RSI3         RSI3
3          RSI4    RSI5  RSI4   EMA5    RSI4  RSI4  RSI5    RSI5    RSI5    RSI4         RSI4
4          RSI5   RSI10  RSI5  EMA20    RSI5  RSI5 RSI10    EMA5   RSI10    RSI5         RSI5
5         RSI10   RSI20 RSI10  EMA60    SMA5 RSI10 RSI20   EMA20   RSI20   RSI10        RSI10
6         SMA20   SMA60 RSI20    SMI     atr RSI20 SMA60   EMA60    SMA5   RSI20         SMA5
7         SMA60    pctB SMA20    ADX    pctB  EMA5   atr     atr   SMA60     atr        SMA20
8           atr calcs.1  pctB   pctB    macd EMA20  pctB     ADX    pctB     ADX        EMA20
9          pctB    <NA>  <NA>   macd myVolat EMA60  <NA>    pctB    macd    pctB        EMA60
10 myChaikinVol    <NA>  <NA> signal calcs.1  pctB  <NA>    macd  signal myVolat          ADX
11      myVolat    <NA>  <NA>  calcs    <NA>  macd  <NA>  signal   mySAR calcs.1         pctB
12        calcs    <NA>  <NA>   <NA>    <NA>  <NA>  <NA> myVolat myVolat    <NA> myChaikinVol
13         <NA>    <NA>  <NA>   <NA>    <NA>  <NA>  <NA> calcs.1    <NA>    <NA>      myVolat
14         <NA>    <NA>  <NA>   <NA>    <NA>  <NA>  <NA>    <NA>    <NA>    <NA>        calcs
我想做的是,在TTR不显著的期间,放置一个
NA
。例如,如果RSI2 TTR在第一季度不显著,我想用
NA
s替换数值,但如果RSI2在第五季度显著,我想保留数值

最后,我应该得到一个与初始数据框尺寸相同的数据框


有什么想法吗?谢谢

首先,您应该将规则存储在列表中,而不是data.frame中。这样您就不必用NAs填充每个“规则列表”以使其长度相同,还可以使用
lappy
处理数据

由于您没有提供任何数据,我编造了一些:

#Load data
set.seed(42)
library(quantmod)
getSymbols('SPY')
SPY <- adjustOHLC(SPY)
dat <- dailyReturn(Cl(SPY))

#Add some TTRs
for (rule in c('RSI', 'SMA')){
  for (n in c(5, 10, 15, 20, 25)){
    newvar <- paste(rule, n, sep='_')
    FUN <- get(rule)
    dat <- cbind(dat, FUN(dat[,1], n=n))
    names(dat)[length(names(dat))] <- newvar
  }
}
dat <- na.omit(dat)
rulenames <- names(dat)[-1]
我还制作了一些每年使用的TTR

#Make a list of rules for each year
library(lubridate)
dat$Year <- year(index(dat))
uniqueYear <- sort(unique(dat$Year))
rulesList <- lapply(uniqueYear, function(x) rulenames[runif(length(rulenames))>.5])
names(rulesList) <- uniqueYear
现在只需每年循环一次,并将
dat
对象子集到适当的行(年)和列(TTR):


如果你发布代码,你会得到更好的答案。请尝试存储一个
列表,而不是
data.frame
。非常感谢Zach给出的非常有价值的答案。
> dat[1:5, 1:5]
           daily.returns    RSI_5   RSI_10   RSI_15   RSI_20
2007-02-08  -0.001308450 40.06379 46.99824 48.59484 49.11738
2007-02-09  -0.007447249 26.65296 40.34267 44.35689 46.10753
2007-02-12  -0.003404196 42.49883 45.94447 47.58264 48.30373
2007-02-13   0.008434995 67.89045 58.59450 55.64932 54.07276
2007-02-14   0.006567123 62.45177 56.28547 54.23836 53.08886
#Make a list of rules for each year
library(lubridate)
dat$Year <- year(index(dat))
uniqueYear <- sort(unique(dat$Year))
rulesList <- lapply(uniqueYear, function(x) rulenames[runif(length(rulenames))>.5])
names(rulesList) <- uniqueYear
> rulesList
$`2007`
[1] "RSI_5"  "RSI_10" "RSI_20" "RSI_25" "SMA_5"  "SMA_10" "SMA_20" "SMA_25"

$`2008`
[1] "RSI_10" "RSI_15" "SMA_5"  "SMA_10" "SMA_25"

$`2009`
[1] "RSI_5"  "RSI_15" "RSI_20" "SMA_5"  "SMA_15" "SMA_25"

$`2010`
[1] "RSI_5"  "RSI_10" "RSI_20" "SMA_5"  "SMA_20" "SMA_25"

$`2011`
[1] "RSI_20" "SMA_5"  "SMA_10" "SMA_15" "SMA_20" "SMA_25"

$`2012`
[1] "RSI_20" "SMA_5"  "SMA_10" "SMA_25"
#Apply the rules to each data.frame
data.by.year <- lapply(uniqueYear, function(year){
  rule_subset <- rulesList[[as.character(year)]]
  data_subset <- dat[dat$Year==year, rule_subset]
})
names(data.by.year) <- uniqueYear
> str(data.by.year[[1]])
An ‘xts’ object from 2007-02-08 to 2007-12-31 containing:
  Data: num [1:226, 1:8] 40.1 26.7 42.5 67.9 62.5 ...
 - attr(*, "dimnames")=List of 2
  ..$ : NULL
  ..$ : chr [1:8] "RSI_5" "RSI_10" "RSI_20" "RSI_25" ...
  Indexed by objects of class: [Date] TZ: 
  xts Attributes:  
List of 3
 $ tclass   : chr "Date"
 $ tzone    : chr ""
 $ na.action:Class 'omit'  atomic [1:25] 1 2 3 4 5 6 7 8 9 10 ...
  .. ..- attr(*, "index")= num [1:25] 1.17e+09 1.17e+09 1.17e+09 1.17e+09 1.17e+09 ...
>