我有一个包含以下数据的数据框:
>PRICE
DATE CLOSE
1 20070103 54.700
2 20070104 54.770
3 20070105 55.120
4 20070108 54.870
5 20070109 54.860
6 20070110 54.270
7 20070111 54.770
8 20070112 55.360
9 20070115 55.760
...
Run Code Online (Sandbox Code Playgroud)
如您所见,我的DATE列表示日期(yyyyMMdd),而我的CLOSE列表示价格.
我现在必须从PerformanceAnalytics包中计算出CalmarRatio.
我是R的新手,所以我无法理解所有内容,但从我用谷歌搜索到的那一刻,我看到该函数的R参数需要是一个类似时间序列的对象.
有没有什么方法可以将我的数组转换为时间序列对象,因为一个句点中的每个日期可能都没有数据(仅适用于我指定的数据)?
有非常好的方法来xts
对象进行子集化.例如,可以获取所有年,月,日的所有数据,但严格地在上午9:30到下午4点之间执行:
my_xts["T09:30/T16:00"]
Run Code Online (Sandbox Code Playgroud)
或者您可以通过以下方式获得两个日期之间的所有观察:
my_xts["2012-01-01/2012-03-31"]
Run Code Online (Sandbox Code Playgroud)
或者在某个特定日期之前/之后的所有日期:
my_xts["/2011"] # from start of data until end of 2011
my_xts["2011/"] # from 2011 until the end of the data
Run Code Online (Sandbox Code Playgroud)
如何获取所有年份的特定月份或所有月份和年份的特定日期的所有数据?是否存在任何其他子集技巧?
我正在尝试使用as.xts()方法将数据帧转换为xts对象.这是我的输入数据帧q:
q
t x
1 2006-01-01 00:00:00 1
2 2006-01-01 01:00:00 2
3 2006-01-01 02:00:00 3
str(q)
'data.frame': 10 obs. of 2 variables:
$ t: POSIXct, format: "2006-01-01 00:00:00" "2006-01-01 01:00:00" "2006-01-01 02:00:00" "2006-01-01 03:00:00" ...
$ x: int 1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
结果是:
> as.xts(q)
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
这是我能想到的最简单的例子,所以没有让它工作是非常令人沮丧的......任何帮助都表示赞赏!
很可能会暴露我是R的新手,但在SPSS中,运行滞后非常容易.显然这是用户错误,但我缺少什么?
x <- sample(c(1:9), 10, replace = T)
y <- lag(x, 1)
ds <- cbind(x, y)
ds
Run Code Online (Sandbox Code Playgroud)
结果是:
x y
[1,] 4 4
[2,] 6 6
[3,] 3 3
[4,] 4 4
[5,] 3 3
[6,] 5 5
[7,] 8 8
[8,] 9 9
[9,] 3 3
[10,] 7 7
Run Code Online (Sandbox Code Playgroud)
我想我会看到:
x y
[1,] 4
[2,] 6 4
[3,] 3 6
[4,] 4 3
[5,] 3 4
[6,] 5 3
[7,] 8 5
[8,] 9 8
[9,] 3 9
[10,] …
Run Code Online (Sandbox Code Playgroud) 我在R中有以下格式的XTS时间序列,并尝试在导出为CSV以便在另一个程序中工作之前进行一些处理,子集化和重新排列.
head(master_1)
S_1
2010-03-03 00:00:00 2.8520
2010-03-03 00:30:00 2.6945
2010-03-03 01:00:00 2.5685
2010-03-03 01:30:00 2.3800
2010-03-03 02:00:00 2.2225
2010-03-03 02:30:00 2.0650
Run Code Online (Sandbox Code Playgroud)
和
str(master_1)
An ‘xts’ object from 2010-03-03 to 2010-05-25 08:30:00 containing:
Data: num [1:4000, 1] 2.85 2.69 2.57 2.38 2.22 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr "S_1"
Indexed by objects of class: [POSIXt,POSIXct] TZ:
Original class: 'zoo'
xts Attributes:
List of 1
$ dateFormat: chr "Date"
Run Code Online (Sandbox Code Playgroud)
我想将其转换为data.frame,以便我可以更轻松地操作它,然后导出到另一个程序.但是,当我使用test1 <- as.data.frame(master_1)
test1确实有可见的索引(即日期和时间)时,
head(test1)
S_1 …
Run Code Online (Sandbox Code Playgroud) 我做了一些研究,我一直在寻找解决方案.我有一个时间序列数据,非常基本的数据框,让我们称之为x
:
Date Used
11/1/2011 587
11/2/2011 578
11/3/2011 600
11/4/2011 599
11/5/2011 678
11/6/2011 555
11/7/2011 650
11/8/2011 700
11/9/2011 600
11/10/2011 550
11/11/2011 600
11/12/2011 610
11/13/2011 590
11/14/2011 595
11/15/2011 601
11/16/2011 700
11/17/2011 650
11/18/2011 620
11/19/2011 645
11/20/2011 650
11/21/2011 639
11/22/2011 620
11/23/2011 600
11/24/2011 550
11/25/2011 600
11/26/2011 610
11/27/2011 590
11/28/2011 595
11/29/2011 601
11/30/2011 700
12/1/2011 650
12/2/2011 620
12/3/2011 645
12/4/2011 650
12/5/2011 639
12/6/2011 620
12/7/2011 600
12/8/2011 …
Run Code Online (Sandbox Code Playgroud) 我正在使用zoo对象,买我的问题也适用于xts对象.它看起来像是一个带有索引的单列向量.在我的例子中,索引是日期的向量,而一列向量是我的数据.一切都很好,除了我想访问日期(从索引).
例如,我有以下结果:
ObjZoo <- structure(c(10, 20), .Dim = c(2L, 1L), index = c(14788, 14789),
class = "zoo", .Dimnames = list(NULL, "Data"))
unclass(ObjZoo)
# Data
# [1,] 10
# [2,] 20
# attr(,"index")
# [1] 14788 14789
Run Code Online (Sandbox Code Playgroud)
我想进入14789
变量或向量,但我不知道如何访问它.
关于R的一个关键是,如果我输入函数名称,我会看到实现.但这个让我感到困惑,递归:
> library(xts)
> align.time
function (x, ...)
{
UseMethod("align.time")
}
<environment: namespace:xts>
Run Code Online (Sandbox Code Playgroud)
x是一个XTS对象,所以这并不意味着它将调用XTS align.time方法......但这就是我正在看的东西!(键入xts::align.time
会给出完全相同的响应.)
我在R工作并阅读csv,其第一栏中有日期和时间.我想先在R中导入这个csv文件,然后将其转换为zoo obect.
我正在使用R中的代码
EURUSD <- as.xts(read.zoo("myfile.csv",sep=",",tz="",header=T))
Run Code Online (Sandbox Code Playgroud)
我的csv文件包含以下格式的数据:
Date,Open,Low,High,Close
2006-01-02 10:01:00,2822.9,2825.45,2822.1,2824.9
2006-01-02 10:02:00,2825,2825.9,2824,2824.95
2006-01-02 10:03:00,2824.55,2826.45,2824,2826.45
2006-01-02 10:04:00,2826.45,2826.45,2824.9,2825.5
2006-01-02 10:05:00,2825.15,2825.5,2824,2824.85
2006-01-02 10:06:00,2824.7,2825.5,2823.7,2823.8
2006-01-02 10:07:00,2823.95,2824.45,2823.55,2824
2006-01-02 10:08:00,2824,2824.85,2823.5,2824.85
2006-01-02 10:09:00,2824.25,2825.45,2824,2825.45
2006-01-02 10:10:00,2825.2,2827,2825,2827
Run Code Online (Sandbox Code Playgroud)
当我运行上面的命令将数据导入RI时,得到以下错误:
Error in as.POSIXlt.character(x, tz, ...) :
character string is not in a standard unambiguous format
Run Code Online (Sandbox Code Playgroud)
我试图找到解决问题的所有方法.我通过网络阅读了很多博客,但这些方法都不适用于我.
我希望有人能帮助我.
我有一个数据集,其中包含在给定日期的特定时间发生的10个事件,每个事件都有相应的值:
d1 <- data.frame(date = as.POSIXct(c("21/05/2010 19:59:37", "21/05/2010 08:40:30",
"21/05/2010 09:21:00", "21/05/2010 22:29:50", "21/05/2010 11:27:34",
"21/05/2010 18:25:14", "21/05/2010 15:16:01", "21/05/2010 09:41:53",
"21/05/2010 15:01:29", "21/05/2010 09:02:06"), format ="%d/%m/%Y %H:%M:%S"),
value = c(11313,42423,64645,643426,1313313,1313,3535,6476,11313,9875))
Run Code Online (Sandbox Code Playgroud)
我想以标准数据帧格式(从"21/05/2010 00:00:00"到"21/05/2010 23:57:00")每3分钟汇总一次结果,以便数据框有480个分档每个3分钟)
首先,我创建一个包含每个3分钟的分区的数据框:
d2 <- data.frame(date = seq(as.POSIXct("2010-05-21 00:00:00"),
by="3 min", length.out=(1440/3)))
Run Code Online (Sandbox Code Playgroud)
然后,我将两个数据帧合并在一起并删除NA:
library(dplyr)
m <- merge(d1, d2, all=TRUE) %>% mutate(value = ifelse(is.na(value),0,value))
Run Code Online (Sandbox Code Playgroud)
最后,我用period.apply()
从xts
包值相加每个箱:
library(xts)
a <- period.apply(m$value, endpoints(m$date, "minutes", 3), sum)
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来做到这一点?它感觉不太理想.
更新#1
在Joshua回答之后我调整了我的代码:
library(xts)
startpoints <- function (x, on = "months", k …
Run Code Online (Sandbox Code Playgroud)