我想从使用getSymbols获得的时间序列中提取日期,但是当我使用index/index.xts函数时,返回的日期似乎是提前一天.我无法理解为什么在以下代码中发生此行为.
但是,预期的行为是获取与原始时间序列中的对象相对应的Date对象列表.
以下是代码,请注意时间序列SPY的最后日期是2012年8月24日,但索引(SPY)调用的最后一个值是2012年8月23日:
getSymbols("SPY")
tail(SPY)
SPY.Open SPY.High SPY.Low SPY.Close SPY.Volume SPY.Adjusted
2012-08-17 142.23 142.30 141.86 142.18 90813700 142.18
2012-08-20 141.98 142.22 141.59 142.19 78255700 142.19
2012-08-21 142.54 143.09 141.45 141.76 105581100 141.76
2012-08-22 141.40 142.05 141.07 141.82 132999200 141.82
2012-08-23 141.47 141.48 140.44 140.66 111406800 140.66
2012-08-24 140.31 141.83 140.22 141.51 99431500 141.51
tail(index(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
tail(index.xts(SPY))
[1] "2012-08-16" "2012-08-19" "2012-08-20" "2012-08-21" "2012-08-22" "2012-08-23"
Run Code Online (Sandbox Code Playgroud)
感谢所有能回复我帖子的人.
有关会话的其他信息
>sessionInfo()
R version 2.15.1 (2012-06-22)
Platform: i386-pc-mingw32/i386 (32-bit)
locale: …Run Code Online (Sandbox Code Playgroud) 我正在尝试为许多资产计算一个滚动窗口(移动1天)协方差矩阵.
说我的df看起来像这样:
df <- data.frame(x = c(1.5,2.3,4.7,3,8.4), y =c(5.3,2.4,8.4,1.3,2.5),z=c(2.5,1.3,6.5,4.3,2.8),u=c(1.1,2.5,4.3,2.5,6.3))
Run Code Online (Sandbox Code Playgroud)
我希望输出看起来如下:
cov(df[1:3,]) :
x y z u
x 2.773333 3.666667 4.053333 2.613333
y 3.666667 9.003333 7.846667 2.776667
z 4.053333 7.846667 7.413333 3.413333
u 2.613333 2.776667 3.413333 2.573333
cov(df[2:4,]) :
x y z u
x 1.523333 4.283333 3.053333 1.23
y 4.283333 14.603333 7.253333 3.93
z 3.053333 7.253333 6.813333 2.22
u 1.230000 3.930000 2.220000 1.08
cov(df[3:5,]) :
x y z u
x 7.6233333 -0.5466667 -3.008333 5.1633333
y -0.5466667 14.4433333 5.941667 0.9233333
z -3.0083333 …Run Code Online (Sandbox Code Playgroud) 在SAS中有一种创建库的方法(使用LIBNAME).这很有用,因为当我们必须进行长数据处理时,我们不会始终更改数据集名称.因此,如果我们想要再次使用数据集而不更改名称,我们可以放入库中.因此,即使数据集名称相同,但由于它们位于不同的库中,我们可以一起处理它们.
我的问题是R中是否有任何可以创建库(或R中的单独文件夹)的选项,以便我们可以在那里保存数据?
这是一个例子:
假设我有一个数据集"dat1".我总结了var1中dat1 var1和var2中的变量.
proc summary data=dat1 nway missing;
var var1 var2;
class var3;
output out=tmp.dat1 (drop = _freq_ _type_) sum = ;
run;
Run Code Online (Sandbox Code Playgroud)
然后我将dat1与dat2合并,这是另一个数据集.dat1和dat2都有公共变量var3,我合并了它.我再次创建了新的数据集dat1.
proc sql;
create table dat1 as
select a.*,b.*
from dat1 a left join tmp.dat2 b
on a.var3=b.var3;
quit;
Run Code Online (Sandbox Code Playgroud)
现在,我再次在合并后总结数据集dat1,以检查var1和var 2的值在合并之前和之后是否保持不变.
proc summary data=dat1 nway missing;
var var1 var2;
class var3;
output out=tmp1.dat1 (drop = _freq_ _type_) sum = ;
run;
Run Code Online (Sandbox Code Playgroud)
R中的等效代码将是
dat3<-ddply(dat1,.(var3),summarise,var1=sum(var1,na.rm=TRUE),var2=sum(var2,na.rm=TRUE))
dat1<-sqldf("select a.*,b.* from dat1 a left join dat2 b on a.var3=b.var3")
dat4<-ddply(dat1,.(var3),summarise,var1=sum(var1,na.rm=TRUE),var2=sum(var2,na.rm=TRUE)) …Run Code Online (Sandbox Code Playgroud) 一个简单的问题:我知道如何xts从帮助中分配时间序列的年份,月份和日期:x['2000-05/2001']依此类推.
但是,如何在一天中的几个小时内对我的数据进行子集化?我想在07:00 am到06:00 pm之间获取所有数据.即,我想在营业时间内提取数据 - 与当天无关(我稍后会照顾周末).帮助有一个表单示例:
.parseISO8601('T08:30/T15:00')
Run Code Online (Sandbox Code Playgroud)
但这在我的情况下不起作用.有人有线索吗?
我试图在R(统计编程语言)中编写一个函数,这将允许我自动计算线性回归(lm)
问题:回归是通过"步"函数计算的,因此所选系数不能提前知道.问题
自动识别由阶梯函数选择的系数.
Vlookup和交叉乘以结果Ex."View(OpenCoefs)"的第二列(估计)与原始数据帧"sp"的各列的最后一行(最后一天)
理想的解决方案是一个函数,我只需键入"run()",它将返回每个回归的"y"s,即第二天标准普尔500指数的预测(开盘价,最低价,最高价,收盘价) .
该代码从雅虎财经网站检索数据,因此如果您运行它,它就可以运行.
这是代码.
sp <- read.csv(paste("http://ichart.finance.yahoo.com/table.csv?s=%5EGSPC&a=03&b=1&c=1940&d=03&e=1&f=2014&g=d&ignore=.csv"))
sp$Adj.Close<-NULL
sp<-sp[nrow(sp):1,]
sp<-as.data.frame(sp)
for ( i in 2:nrow( sp ) ) {
sp[ i , "Gr_Open" ] <-
( sp[ i , "Open" ] / sp[ i - 1 , "Open" ] ) - 1
}
for ( i in 2:nrow( sp ) ) {
sp[ i , "Gr_High" ] <-
( sp[ i , "High" ] / sp[ i - 1 , "High" ] ) - 1
} …Run Code Online (Sandbox Code Playgroud) 几个星期前,我是一名初学者,我正在努力学习这个apply家庭.无法弄清楚如何使用lapply它是疯狂的.是的,我抬头看了?lapply几本书,其中包括R简言之和R食谱,但仍然无法弄清楚我做错了什么.
lapply(X = c("ggplot2", "gtable", "grid"), library)
## Error: 'package' must be of length 1
lapply(X = c("ggplot2", "gtable", "grid"), FUN = function(x) library(x))
## Error: there is no package called 'x'
lapply(X = c("ggplot2", "gtable", "grid"), FUN = library)
## Error: 'package' must be of length 1
x = c("ggplot2", "gtable", "grid")
lapply(x, library)
## Error: 'package' must be of length 1
lapply(x, FUN = function(x) library(x))
## Error: …Run Code Online (Sandbox Code Playgroud) 我一直在使用R which函数从数据框中删除行.我最近发现,如果搜索词不在data.frame中,则结果为空字符.
# 1: returns A-Q, S-Z (as expected)
LETTERS[-which(LETTERS == "R")]
# 2: returns "character(0)" (not what I would expect)
LETTERS[-which(LETTERS == "1")]
# 3: returns A-Z (expected)
LETTERS[which(LETTERS != "1")]
# 4: returns A-Q, S-Z (expected)
LETTERS[which(LETTERS != "R")]
Run Code Online (Sandbox Code Playgroud)
第二个例子-which()是未找到搜索词时的预期行为吗?我已经将代码切换为使用示例4中的语法,这似乎更安全,但我只是好奇.
这是输出:
library(tseries) # for adf.test function
adf.test(data)
Augmented Dickey-Fuller Test
data: data
Dickey-Fuller = 11.1451, Lag order = 16, p-value = 0.99
alternative hypothesis: stationary
Warning message:
In adf.test(spread.princomp) : p-value greater than printed p-value
adf.test(coredata(data))
Augmented Dickey-Fuller Test
data: coredata(data)
Dickey-Fuller = -4.031, Lag order = 16, p-value = 0.01
alternative hypothesis: stationary
Warning message:
In adf.test(coredata(spread.princomp)) :
p-value smaller than printed p-value
Run Code Online (Sandbox Code Playgroud)
基础数据是数字向量.人们似乎成功地使用xts应用adf.test,所以我不确定我做错了什么.请告诉我我能提供的其他信息.
我有一个包含一些列具有类似名称的CSV文件"beauty & spas","american (new)"等等.当我读了读该文件并使用names()查看列名,他们已转换为"beauty...spas.1"和"american...new..1".如何防止它们被转换?我不想手动纠正它们.
我想将矢量导出到每个值之间带逗号的文件.我试过用paste它sep = ","但它不起作用.有谁知道为什么?
> x <- rnorm(10)
> paste(x, sep = ",")
[1] "-1.08574649988891" "2.9580381152357" "-0.549880906960338" "1.79794352588269" "-1.06316832291584" "-1.56636513327118" "0.363867572492577"
[8] "-0.644707355221403" "0.617827074223129" "-1.50892267338431"
Run Code Online (Sandbox Code Playgroud)