R 如何以矢量化方式处理所有子集

R 如何以矢量化方式处理所有子集,r,vectorization,R,Vectorization,我有一个包含很多符号的股价数据框,我想以矢量化的方式对每个符号的子集执行操作。我的数据是: head(dataset) date open high low close volume symbol 1 2014-08-29 34.59 34.6800 34.59 34.6800 200 AAIT 2 2014-08-28 34.96 34.9600 34.96 34.9600 211 AAIT 3 2014-08-27 35.28

我有一个包含很多符号的股价数据框,我想以矢量化的方式对每个符号的子集执行操作。我的数据是:

 head(dataset)
        date  open    high   low   close volume  symbol 
1 2014-08-29 34.59 34.6800 34.59 34.6800    200    AAIT 
2 2014-08-28 34.96 34.9600 34.96 34.9600    211    AAIT 
3 2014-08-27 35.28 35.2800 35.28 35.2800    507    AAIT 
4 2014-08-26 35.02 35.0200 35.02 35.0200     00    AAIT 
5 2014-08-25 34.57 35.0200 34.57 35.0200    385    AAIT 
6 2014-08-22 34.80 34.8299 34.80 34.8299    802    AAIT 
对于每个符号,我都想这样做:

for (symb in unique(dataset$symbol){ 
    dataset$night = with(subset(dataset, dataset$symbol == symb), open[-length(open)]-close[-1])
}

这会导致最后一行填充
NA
,所以我不能在整个数据帧上这样做。之后我可以替换最后一行,但为了更方便,我更愿意使用子集。是否可以以矢量化的方式执行
for
循环(对于r上的循环非常慢,如果我有太多符号,这可能会成为一个问题)

您可以使用
dplyr

library(dplyr)
dataset <- dataset %>%
           group_by(symbol) %>%
           mutate(night = c(head(open, -1) - tail(close, -1), NA))
library(plyr)
dataset <- ddply(dataset, .(symbol), mutate,
                 night = c(head(open, -1) - tail(close, -1), NA))
数据。表

library(data.table)
dt <- data.table(dataset)
setkey(dt, symbol)
dt[, night := c(head(open, -1) - tail(close, -1), NA), by = symbol]
库(data.table)

dt和一种基本方式:
(dataset,night@rawr,假设符号按字母顺序排序。对我来说似乎很危险。什么是运算符
:=
在itIt上找不到文档它是data.table包的一部分。您可以通过键入
?:=”来访问它的do
但最好的办法是阅读软件包附带的简介小插曲。