小编use*_*926的帖子

R data.table分组用于滞后回归

带有数据的表(它是一个data.table对象),如下所示:

      date         stock_id logret
   1: 2011-01-01        1  0.001
   2: 2011-01-02        1  0.003
   3: 2011-01-03        1  0.005
   4: 2011-01-04        1  0.007
   5: 2011-01-05        1  0.009
   6: 2011-01-06        1  0.011
   7: 2011-01-01        2  0.013
   8: 2011-01-02        2  0.015
   9: 2011-01-03        2  0.017
  10: 2011-01-04        2  0.019
  11: 2011-01-05        2  0.021
  12: 2011-01-06        2  0.023
  13: 2011-01-01        3  0.025
  14: 2011-01-02        3  0.027
  15: 2011-01-03        3  0.029
  16: 2011-01-04        3  0.031
  17: 2011-01-05        3  0.033
  18: 2011-01-06        3  0.035
Run Code Online (Sandbox Code Playgroud)

以上可以创建为:

DT = data.table( …
Run Code Online (Sandbox Code Playgroud)

grouping r reshape data.table

13
推荐指数
1
解决办法
2470
查看次数

R group select以data.table中的值为条件

嗨,我想选择一组以数据表中的值为条件的值.

具体来说,我想选择所有按日期和ID分组的列,以获取e == 1的所有正值

   id   date     e       logret 
   7 2011-07-29  1   -0.0272275211      
   7 2011-07-29  2    0.0034229025      
   7 2011-07-29  3    0.0042622177      
   8 2011-07-29  1    0.0035662770      
   8 2011-07-29  2   -0.0015268474 
   8 2011-07-29  3    0.0013333333
   7 2011-07-30  1    0.0044444444      
   7 2011-07-30  2   -0.0001111111 
   7 2011-07-30  3    0.0013333333
Run Code Online (Sandbox Code Playgroud)

这里将列出id 8和日期2011-07-29的所有元素以及日期2011-07-30的所有id 7的元素,因为e == 1的logret> 0,其中2011年的所有元素都是id 7由于第一个logret(其中e == 1)<0,因此忽略07-29

答:

   8 2011-07-29  1    0.0035662770      
   8 2011-07-29  2   -0.0015268474 
   8 2011-07-29  3    0.0013333333
   7 2011-07-30  1    0.0044444444      
   7 2011-07-30  2   -0.0001111111 
   7 2011-07-30  3    0.0013333333    
Run Code Online (Sandbox Code Playgroud)

在sql中我会使用某种subselect来实现这一点.我会 : …

select r data.table

6
推荐指数
1
解决办法
1701
查看次数

R - 矢量化哪个操作

嗨我在R中有一个函数,我正在尝试优化性能.我需要向量化循环.我的问题是稍微复杂的数据结构以及我需要使用'which'命令执行查找的方式.

假设我们正在处理5个元素(1,2,3,4,5),10x2矩阵对是5个元素的所有唯一对的组合(即(1,2),(1,3),(1) ,4)....(4,5)).all_prods是一个10x1矩阵,我需要在迭代所有5个元素时使用这些对查找.

因此,对于1,我需要从all_prods索引行1,2,3,4(对1,2 1,3 1,4和1,5),依此类推1,2,3,4,5.

我最近才从matlab切换到R,所以非常感谢任何帮助.

foo <- function(AA , BB , CC ){
    pa <- AA*CC;
    pairs <-  t(combn(seq_len(length(AA)),2));

    all_prods <- pa[pairs[,1]] * pa[pairs[,2]];

    result <- matrix(0,1,length(AA));

    # WANT TO VECTORIZE THIS BLOCK
    for(st in seq(from=1,to=length(AA))){
       result[st] <- sum(all_prods[c(which(pairs[,1]==st), which(pairs[,2]==st))])*BB[st];
    }
   return(result);
}
AA <- seq(from=1,to=5); BB<-seq(from=11,to=15); CC<-seq(from=21,to=25);
results <- foo(AA,BB,CC);

#final results is [7715 164208 256542 348096 431250]
Run Code Online (Sandbox Code Playgroud)

我想将for循环转换为矢量化版本.我不想循环遍历每个元素st,而是想在一个命令中完成它,它给出了一个结果向量(而不是逐个元素地构建它)

提前致谢.

loops r vectorization which

3
推荐指数
1
解决办法
256
查看次数

R中的条件性cumsum?

嗨,这是问题的延伸: 条件累积和

假设我有以下向量.我想计算零中运行的块总数.

d <- c(0,0,0,1,3,4,5,-1,2,3,-5,8,0,0,-2,-3,3,5,0,0,0,-1,-1,-1,-1);

Ans d <- c(0,0,0,1,4,8,13,12,14,17,12,20,0,0,-2,-5,-2,3,0,0,0,-1,-2,-3,-4).
Run Code Online (Sandbox Code Playgroud)

我想以矢量化方式进行,因为我的矢量相当大.到目前为止,我一直在努力使用rle来实现这一目标而没有太大的成功.

非常感谢.

r vectorization

3
推荐指数
1
解决办法
556
查看次数

将价格数据汇总到R data.table中的不同时间范围

嗨,我希望将data.table中的精确数据汇总到5分钟(或10分钟).我知道这可以通过使用xts和to.minutes5函数轻松完成,但我不喜欢在这个实例中使用xts,因为数据集相当大.有没有一种简单的方法在data.table中执行此操作?

数据示例:在此示例中,21.30到21.34之间的时段(包括两者)将只有一行t = 21.30,open = 0.88703,high = 0.88799,low = 0.88702,close = 0.88798,volume = 43(注意来自的数据) 21.35本身被忽略了).

                      t    open    high     low   close volume
 1: 2010-01-03 21:27:00 0.88685 0.88688 0.88685 0.88688      2
 2: 2010-01-03 21:28:00 0.88688 0.88688 0.88686 0.88688      5
 3: 2010-01-03 21:29:00 0.88688 0.88704 0.88687 0.88703      7
 4: 2010-01-03 21:30:00 0.88703 0.88795 0.88702 0.88795     10
 5: 2010-01-03 21:31:00 0.88795 0.88795 0.88774 0.88778      7
 6: 2010-01-03 21:32:00 0.88778 0.88778 0.88753 0.88760      8
 7: 2010-01-03 21:33:00 0.88760 0.88781 0.88760 0.88775     11
 8: 2010-01-03 21:34:00 …
Run Code Online (Sandbox Code Playgroud)

r xts data.table

3
推荐指数
1
解决办法
220
查看次数

R data.table中的分组计数聚合

包含日期,购买价值和销售价值的表格.我想计算每天购买和销售的数量,以及购买和销售的总数.我发现在data.table中这有点棘手.

   date   buy sell      
2011-01-01  1   0
2011-01-02  0   0
2011-01-03  0   2
2011-01-04  3   0
2011-01-05  0   0
2011-01-06  0   0
2011-01-01  0   0
2011-01-02  0   1
2011-01-03  4   0
2011-01-04  0   0
2011-01-05  0   0
2011-01-06  0   0
2011-01-01  0   0
2011-01-02  0   8
2011-01-03  2   0
2011-01-04  0   0
2011-01-05  0   0
2011-01-06  0   5
Run Code Online (Sandbox Code Playgroud)

可以使用以下代码创建上述data.table:

 DT = data.table(
          date=rep(as.Date('2011-01-01')+0:5,3) , 
          buy=c(1,0,0,3,0,0,0,0,4,0,0,0,0,0,2,0,0,0),
          sell=c(0,0,2,0,0,0,0,1,0,0,0,0,0,8,0,0,0,5));
Run Code Online (Sandbox Code Playgroud)

我想要的结果是:

   date   total_buys   total_sells
2011-01-01    1            0
2011-01-02    0            2
                and so on  
Run Code Online (Sandbox Code Playgroud)

此外,我还想了解购买和销售的总数: …

aggregate r count data.table

3
推荐指数
1
解决办法
8548
查看次数

R - 向量化条件替换

嗨我正在尝试操作一个数字列表,我想这样做没有for循环,在R中使用快速本机操作.操作的伪代码是:

默认情况下,起始总数为100(对于零内的每个块)

从第一个零到下一个零,累计总数下降超过2%的时刻将所有后续数字替换为零.

在零之内完成所有数字块

累积总和每次都重置为100

例如,如果以下是我的数据:

d <- c(0,0,0,1,3,4,5,-1,2,3,-5,8,0,0,-2,-3,3,5,0,0,0,-1,-1,-1,-1);
Run Code Online (Sandbox Code Playgroud)

结果将是:

0 0 0 1 3 4 5 -1 2 3 -5 0 0 0 -2 -3 0 0 0 0 0 -1 -1 -1 0
Run Code Online (Sandbox Code Playgroud)

目前我有一个for循环的实现,但由于我的向量很长,性能很糟糕.

提前致谢.

这是一个运行的示例代码:

d <- c(0,0,0,1,3,4,5,-1,2,3,-5,8,0,0,-2,-3,3,5,0,0,0,-1,-1,-1,-1);
ans <- d;
running_total <- 100;
count <- 1;
max <- 100;
toggle <- FALSE;
processing <- FALSE;

for(i in d){
  if( i != 0 ){  
       processing <- TRUE; 
       if(toggle == TRUE){
          ans[count] = 0;  
       }
       else{
         running_total = …
Run Code Online (Sandbox Code Playgroud)

logic for-loop r vectorization conditional-statements

2
推荐指数
1
解决办法
588
查看次数