我创建了一个for循环,我想使用Rcpp库来加速它.我对C++不太熟悉.你能帮助我更快地完成我的功能吗?谢谢您的帮助!
我已将算法,代码以及输入和输出与sessionInfo一起包括在内.
这是我的算法:
如果当前价格高于先前价格,则在名为TR的列中标记(+1)
如果当前价格低于先前价格,则在名为TR的列中标记(-1)
如果当前价格与先前价格相同,则在名为TR的列中标记与先前价格相同的价格
这是我的代码:
price <- c(71.91, 71.82, 71.81, 71.81, 71.81, 71.82, 71.81, 71.81, 71.81,
71.82, 71.81, 71.81, 71.8, 71.81, 71.8, 71.81, 71.8, 71.8, 71.8,
71.8, 71.81, 71.81, 71.81, 71.81, 71.81, 71.81, 71.81, 71.81,
71.81, 71.82, 71.81, 71.81, 71.81, 71.81, 71.81, 71.81, 71.8,
71.8, 71.81, 71.81, 71.81, 71.81, 71.82, 71.82, 71.81, 71.81,
71.81, 71.81, 71.81, 71.81, 71.81, 71.82, 71.82, 71.82, 71.82,
71.82, 71.82, 71.82, 71.81, 71.82, 71.82, 71.82, 71.82, 71.82,
71.82, 71.82, 71.82, 71.82, 71.81, …Run Code Online (Sandbox Code Playgroud) 几个月前我编写了一个将数据帧转换为xts对象的函数.它曾经工作,现在,它不再工作.我不知道如何解决它.我再次安装了xts包,但没有用.我搜索了stackoverflow并用Google搜索了它.我将不胜感激任何帮助.
谢谢!
这是我得到的错误:
Error in .Call("dimnames_zoo", x) :
"dimnames_zoo" not resolved from current namespace (xts)
Run Code Online (Sandbox Code Playgroud)
这是我的功能:
MakeXts<-function(data){
library(xts)
data$Date<-strptime(paste(data$Date,data$Time),"%m/%d/%Y %H:%M:%S")
data<-data[,-2]
data.xts<-xts(data[,-1],order.by=as.POSIXct(data[,1]))
return (data.xts)
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
myData.xts <- MakeXts(myData)
Run Code Online (Sandbox Code Playgroud)
和数据:
myData <- structure(list(Date = c("02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015", "02/12/2015",
"02/12/2015", "02/12/2015"), Time = c("16:00:00", "16:00:12",
"16:00:46", "16:00:49", "16:01:18", "16:01:25", "16:02:00", "16:02:00",
"16:02:00", "16:02:06", "16:03:02", "16:03:02", "16:03:02", "16:03:02", …Run Code Online (Sandbox Code Playgroud) 我想通过矢量化或使用Data.table或其他方法来提高for循环的速度.我必须在1,000,000行上运行代码,我的代码非常慢.
代码是相当不言自明的.我在下面提供了一个解释,以防万一.我已经包含了函数的输入和输出.希望你能帮助我更快地完成这项功能.
我的 目标是将矢量"Volume"分区,其中每个bin等于100份.向量"卷"包含交易的股票数量.这是它的样子:
head(Volume, n = 60)
[1] 5 3 1 5 3 1 1 1 1 1 1 1 18 1 1 18 2 7 13 2 7 13 3 2 1 1 3 2 1 1 1
[32] 1 6 6 1 1 1 1 1 1 1 1 18 2 1 1 2 1 14 18 2 1 1 2 1 14 1 1 9 5
Run Code Online (Sandbox Code Playgroud)
向量"binIdexVector"与"Volume"的长度相同,它包含bin号; 即前100个股票的每个元素得到数字1,接下来100个股票的每个元素得到数字2,接下来100个股票的每个元素得到数字3,依此类推.这是矢量的样子:
head(binIdexVector, n = 60)
[1] 1 1 …Run Code Online (Sandbox Code Playgroud) 我有3个字符串:
a<-c("a1","a2","a3")
b<-c("b1","b2","b3")
c<-c("c1","c2","c3")
Run Code Online (Sandbox Code Playgroud)
如何获得以下输出:
"a1","b1","c1","a2","b2","c2","a3","b3","c3"
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
paste(a,b,c,sep='","')
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
[1] "a1\",\"b1\",\"c1" "a2\",\"b2\",\"c2" "a3\",\"b3\",\"c3"
有办法吗?谢谢.
是否有更快的方法来获取向量并将其转换为10列矩阵,如下面的输出?
我有一个9000个元素的向量,我正在尝试创建200个列,从最近的观察到之前的200个观察,每个列向后.
在下面的例子中,数字10代表向量中的第10个obs,9代表第9个obs,...,数字1代表向量中的第一个观察.
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 10 9 8 7 6 5 4 3 2 1
[2,] 11 10 9 8 7 6 5 4 3 2
[3,] 12 11 10 9 8 7 6 5 4 3
[4,] 13 12 11 10 9 8 7 6 5 4
[5,] 14 13 12 11 10 9 8 7 6 5
[6,] 15 14 13 12 11 10 9 8 7 6
[7,] …Run Code Online (Sandbox Code Playgroud) 我的目标:我每5行计算一次xts列的曲线下面积.
我的目标:我想知道R中是否有一个函数可以更快地(向量化它)而不是从myxts5的列中生成一个向量然后循环计算.
谢谢你的帮助.
我已经包含了我的代码,输出和数据集:
#create an xts object
library(xts)
myxts5<-xts(dat5[,2:7],order.by=as.POSIXct(dat5[,1]))
colnames(myxts5)<-c("Open","High","Low","Close","Volume","RSI_10")
#make the data reproducible
dput(myxts5,file='so4.txt')
#my method to calculate the entire area under the RSI
library(MESS)
y1<-as.vector(myxts5[11:nrow(myxts5),"RSI_10"]) #remove the first 10 NAs
x1<-1:length(y1)
AUC_RSI10<-NA
for(i in 1:(length(y1)-4))
{
AUC_RSI10[i]<-auc(x1,y1,from=i,to=i+4,type="spline")
}
#output the result
dput(AUC_RSI10,file='so5.txt')
Run Code Online (Sandbox Code Playgroud)
这是我的输出:
c(212.42031469304, 212.798819901101, 209.986805467201, 204.085562604063,
197.984367949833, 190.26277666882, 186.077746687353, 175.748595915665,
153.079882459862, 130.009179454897, 102.067828644029, 93.1546072252816,
106.253169598421, 126.695279601823, 156.84779427326, 171.19433284721,
177.724612560769, 176.407343545939, 180.185730377015, 185.540559407078,
181.492038514392, 189.691635230233, 184.490969841544, 188.753967108042,
207.705900307578, 214.048826298562, 218.30216750124, 212.29968278624,
199.551248663318, 188.776300102749, 182.52612752936, 181.256931078184,
186.756042540598, 192.301043062924, …Run Code Online (Sandbox Code Playgroud)