【问题标题】:R: plotting data.frame against time with "hardcoded" date columnR:使用“硬编码”日期列针对时间绘制 data.frame
【发布时间】:2016-02-04 11:47:19
【问题描述】:

我用谷歌搜索了很多,但我仍然无法弄清楚这一点。我正在尝试根据时间绘制数据框中的一列,但是我的日期列被“硬编码”(因为缺少更好的词)作为数据框中的索引而不是 DATE 列本身作为变量。

> head(tmp)[1]

这是我得到的,第一列是 Returns:

                      RETURNS
2010-01-13 00:00:00  0.8291384
2010-01-14 00:00:00  0.2423567
2010-01-15 00:00:00 -1.0882186
2010-01-19 00:00:00  1.2422194
2010-01-20 00:00:00 -1.0654438
2010-01-21 00:00:00 -1.9126605

如果我像这样绘制它:

plot(tmp$RETURNS)

我得到了一个从 1 到 1500(obs.)而不是时间的指数收益图。如果我有一个不同的时间列,我会像这样绘制它,这很好:

plot(tmp$DATE, tmp$RETURNS)

但是,如果有意义的话,我不知道如何从“硬编码”日期列中提取日期。我试图将它转换为其他对象,timeSeries,动物园等。没有帮助。我确信有某种简单的功能,我只是找不到它。感谢大家的帮助。

编辑: 谢谢大家,非常感谢您的帮助。所有答案都很好,太糟糕了,我不能全部接受 ;) 当然,我正在寻找的是 rownames

【问题讨论】:

  • tmp$datetimes <- as.POSIXct(rownames(tmp), tz = "GMT")
  • 它不是硬编码的,邮票是 row.names。 IE。 tmp$time

标签: r


【解决方案1】:

复制您的数据(您真的应该使用dput 让我们的生活更轻松):

df <- as.data.frame(c(0.8291384, 0.2423567,-1.0882186, 1.2422194,-1.0654438,-1.9126605))
names(df) <- c("RETURNS")
rownames(df) <- c("2010-01-13 00:00:00", "2010-01-14 00:00:00", "2010-01-15 00:00:00", "2010-01-19 00:00:00","2010-01-20 00:00:00","2010-01-21 00:00:00")
df

                       RETURNS
2010-01-13 00:00:00  0.8291384
2010-01-14 00:00:00  0.2423567
2010-01-15 00:00:00 -1.0882186
2010-01-19 00:00:00  1.2422194
2010-01-20 00:00:00 -1.0654438
2010-01-21 00:00:00 -1.9126605

清理:

df$Date <- as.Date(rownames(df))
rownames(df) <- NULL
df

     RETURNS       Date
1  0.8291384 2010-01-13
2  0.2423567 2010-01-14
3 -1.0882186 2010-01-15
4  1.2422194 2010-01-19
5 -1.0654438 2010-01-20
6 -1.9126605 2010-01-21

绘图:

plot(df$Date, df$RETURNS)

library(ggplot2)
ggplot(df, aes(x=Date, y=RETURNS)) + geom_point() + scale_x_date()

【讨论】:

  • 谢谢 Les,答案也很好。
【解决方案2】:

假设输入如下面的注释中所示,然后使用 zoo,我们可以使用经典图形、ggplot2 和 lattice 进行绘图,如下所示。我们还在最后展示了一个基本的 R 解决方案和一个变体。请注意,由于时间始终为 0,因此我们在所有情况下都使用 "Date" 类作为时间索引。

library(zoo)
z <- zoo(df$RETURNS, as.Date(rownames(df)))

plot(z)

library(ggplot2)
autoplot(z)

library(lattice)
xyplot(z)

# this one does not use any packages
df2 <- data.frame(time = as.Date(rownames(df)), RETURNS = df$RETURNS)
plot(RETURNS ~ time, df2)

# this also works using df2 just calculated
plot(df2)

注意:我们假设输入是:

df <- data.frame(
  RETURNS = c(0.8291384, 0.2423567,-1.0882186, 1.2422194,-1.0654438,-1.9126605),
  row.names = c("2010-01-13 00:00:00", "2010-01-14 00:00:00", "2010-01-15 00:00:00", 
    "2010-01-19 00:00:00","2010-01-20 00:00:00","2010-01-21 00:00:00"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多