带有数据的表(它是一个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) 嗨,我想选择一组以数据表中的值为条件的值.
具体来说,我想选择所有按日期和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来实现这一点.我会 : …
嗨我在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,而是想在一个命令中完成它,它给出了一个结果向量(而不是逐个元素地构建它)
提前致谢.
嗨,这是问题的延伸: 条件累积和
假设我有以下向量.我想计算零中运行的块总数.
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来实现这一目标而没有太大的成功.
非常感谢.
嗨,我希望将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) 包含日期,购买价值和销售价值的表格.我想计算每天购买和销售的数量,以及购买和销售的总数.我发现在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)
此外,我还想了解购买和销售的总数: …
嗨我正在尝试操作一个数字列表,我想这样做没有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)