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
但最好的办法是阅读软件包附带的简介小插曲。