一个新手问题。 (增加新信息)
我有一组随机收集的时间戳数据。我想创建一个图表矩阵,但我无法使用scatterplot或xyplot&时间对象。
我的数据
dataset$Time #POSIX time objects (no set sampling period)
#i built POSIX time objects by dataset$Time<-strptime(tt, "%H:%M:%OS")
#the origial string was formated like this 12:12:12.234 (HH:MM:SS:msec)
dataset$d1, dataset$d2 #integers
dataset$d3 #factor with 10 levels
我可以做这些
plot( dataset$Time, dataset$d1)
scatterplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$d2 | dataset$d3, data=dataset)
但是,我不能这样做(在x轴上的POSIX时间对象)
scatterplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
xyplot(dataset$d1 ~ dataset$Time | dataset$d3, data=dataset)
( NEW INFO )
结构错误(.Internal(as.POSIXct(x,tz)),class = c(“POSIXt”,“POSIXct”),:无效的'x'参数。
( NEW INFO )但这有效(y轴的POSIX时间对象)
xyplot(dataset$Time ~ dataset$d1 | dataset$d3, data=dataset)
相关,但不同的问题是hexbin。将时间对象添加到hexbin时,hexbin中的图表不会在单位上显示正确的时间格式。
bin<-hexbin(dataset$Time, dataset$d1)
plot(bin))
我该怎么办?
感谢您对此进行调查!!
答案 0 :(得分:2)
显然R在处理POSIX时间成瘾方面遇到了一些问题......它给了我错误:
+.POSIXt
中的错误(x [floor(d)],x [ceiling(d)]):没有为“POSIXt”对象定义二进制'+'
只是将它们转换为数字,它应该工作。您可以隐藏相应的轴并稍后使用正确的日期重新绘制
E.g:
scatterplot(dataset$d1 ~ as.numeric(dataset$Time) | dataset$d3, data=dataset, xaxt="n")
axis(1, at=as.numeric(dataset$Time), labels=dataset$Time, cex.axis=0.5)
答案 1 :(得分:2)
对我来说它只是有效,所以你可能有一个错误格式的时间向量。致电class(dataset$Time)
后会得到什么?它应包含“POSIXct”才能使其正常工作。
另一方面,如果您提供dataset$
,则无需在公式中加data=dataset
。
答案 2 :(得分:2)
这是一个工作示例。您可能已经弄错了数据格式 - 需要注意精确的数据格式。
首先,一个简单的数据框:
R> X <- data.frame(pt=Sys.Date()+0:4, x1=100+cumsum(rnorm(5)),
+ x2=90+cumsum(rt(5,4)))
R> X
pt x1 x2
1 2010-06-22 98.73 90.33
2 2010-06-23 99.43 89.56
3 2010-06-24 98.85 86.95
4 2010-06-25 99.08 88.52
5 2010-06-26 100.30 94.08
R>
这是{{3>}不使用的所谓 wide 形式。您需要将其转换为 long 格式。我在这里使用stack()
,您也可以使用lattice中的cast()
和melt()
包:
R> Y <- data.frame(pt=rep(X$pt,2), stack(X, select=c(x1,x2)))
R> Y
pt values ind
1 2010-06-22 98.73 x1
2 2010-06-23 99.43 x1
3 2010-06-24 98.85 x1
4 2010-06-25 99.08 x1
5 2010-06-26 100.30 x1
6 2010-06-22 90.33 x2
7 2010-06-23 89.56 x2
8 2010-06-24 86.95 x2
9 2010-06-25 88.52 x2
10 2010-06-26 94.08 x2
R>
现在xyplot
来电只是:
R> xyplot(values ~ pt | ind, data=Y, panel=panel.lines)
你当然可以使用更复杂的条件表达式。