R中的时间戳,Qplot和strptime

时间:2010-07-14 09:54:42

标签: r ggplot2 timestamp

这是一个后续问题,正如hadley指出的那样,除非我用时间戳修复问题,否则我生成的图表将是不正确的。考虑到这一点,我正在努力解决我在代码中遇到的问题。到目前为止,我已经从我之前的问题得到了回答,使用attach()函数停止使用dataSet.df $ variableName 我从strptime时间戳中绘制图表时遇到问题。我将附上我正在使用的所有代码以及解析数据集的XML文件(这在前面的问题中也有回答)来自。

<?xml version = "1.0"?>
    <Company >
 <shareprice>
     <timeStamp> 12:00:00.01</timeStamp>
     <Price>  25.02</Price>
 </shareprice>
 <shareprice>
     <timeStamp> 12:00:00.02</timeStamp>
     <Price>  15</Price>
 </shareprice>
 <shareprice>
      <timeStamp> 12:00:00.025</timeStamp>
      <Price>  15.02</Price>
 </shareprice>
 <shareprice>
      <timeStamp> 12:00:00.031</timeStamp>
      <Price>  18.25</Price>
 </shareprice>
 <shareprice>
      <timeStamp> 12:00:00.039</timeStamp>
      <Price>  18.54</Price>
 </shareprice>
 <shareprice>
       <timeStamp> 12:00:00.050</timeStamp>
       <Price> 16.52</Price>
 </shareprice>
    <shareprice>
      <timeStamp> 12:00:01.01</timeStamp>
      <Price>  17.50</Price>
    </shareprice>
  </Company>

我目前的R代码如下:

library(ggplot2)
library (XML)
test.df <- xmlToDataFrame("c:/Users/user/Desktop/shares.xml")
test.df 
timeStampParsed <- strptime(as.character(test.df$timeStamp), "%H:%M:%OS")
test.df$Price <- as.numeric(as.character(test.df$Price))
summary (test.df)
mean(test.df$Price)
sd (test.df$Price)
mean(timeStampParsed)
par(mfrow=c(1,2))
plot(timeStampParsed, test.df$Price)
qplot(timeStampParsed,Price,data=test.df,geom=c("point","line"), 
      scale_y_continuous(limits = c(10,26)))

plot命令会生成一个图形,但看起来不是很令人愉快。 qplot命令返回以下错误消息:

Error in sprintf(gettext(fmt, domain = domain), ...) : 
invalid type of argument[1]: 'symbol'

为了实现这一目标(并减少被问到的问题)是否有可以使用的教程/网站?再次非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

仍然在我之前的两个回答中纠正了我纠正的代码中的一些错误。让我们再次尝试这一点,更明确地说:

library(ggplot2)
library (XML)
df <- xmlToDataFrame("/tmp/anthony.xml")   # assign to df, shorter to type
df
sapply(df, class)          # shows everything is a factor
summary(df)                # summary for factor: counts !
df$timeStamp <- strptime(as.character(test.df$timeStamp), "%H:%M:%OS")
df$Price <- as.numeric(as.character(test.df$Price))
sapply(df, class)          # shows both columns converted
options("digits.secs"=3)   # make sure we show sub-seconds
summary (df)               # real summary
with(df, plot(timeStamp, Price))    # with is an elegant alternative to attach()

我的qplot()也出错,但您的数据范围可能太小。所以让我们试试这个:

R> set.seed(42)               # fix random number generator
R> df$timeStamp <- df[1,"timeStamp"] + cumsum(runif(7)*60)
R> summary(df)                # new timestamps spanning larger range
   timeStamp                          Price     
 Min.   :2010-07-14 12:00:54.90   Min.   :15.0  
 1st Qu.:2010-07-14 12:01:59.71   1st Qu.:15.8  
 Median :2010-07-14 12:02:58.12   Median :17.5  
 Mean   :2010-07-14 12:02:55.54   Mean   :18.0  
 3rd Qu.:2010-07-14 12:03:52.20   3rd Qu.:18.4  
 Max.   :2010-07-14 12:04:51.96   Max.   :25.0  
R> qplot(timeStamp,Price, data=df, geom=c("point","line"), 
+  scale_y_continuous(limits = c(10,26)))
R> 

现在qplot()有效。

总而言之,您使用的数据并未满足您正在使用的qplot函数的某些最低要求 - 比如说时间轴超过一秒。

通常,您可能希望从 R简介(随程序附带)或其他介绍文本开始。你首先跳到高级材料(日期时间数据类型,读取XML,因素,......)并被烧毁。先迈出第一步。