R:使用“硬编码”日期列绘制data.frame与时间的关系

时间:2016-02-04 11:47:20

标签: r

我已经搜索了很多,但我仍然无法想象这一个。我试图在数据框中根据时间绘制一列,但是我的日期列是“硬编码”(缺少更好的单词)作为数据框中的索引而不是DATE列,作为变量本身。

> head(tmp)[1]

这是我得到的,第一列是返回:

                      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(数量为障碍物),而不是时间。如果我得到一个明确的时间列,我会像这样绘制它,它会很好:

plot(tmp$DATE, tmp$RETURNS)

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

编辑: 谢谢你们,非常感谢你的帮助。所有答案都很棒,太糟糕了,以至于我无法接受所有答案;)当然,这是 rownames 我正在寻找的。

2 个答案:

答案 0 :(得分:1)

重现您的数据(您应该真的使用SELECT i.id_ingredient, l.id_language, il.trad FROM Ingredient i JOIN Language l ON 1=1 LEFT JOIN Ingredient_language il ON il.id_ingredient = i.id_ingredient AND il.id_language = l.id_language 让我们的生活更轻松):

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

enter image description here

plot(df$Date, df$RETURNS)

enter image description here

答案 1 :(得分:0)

假设输入如下面的注释那样使用动物园,我们可以使用经典图形,ggplot2和格子进行绘图,如下所示。我们还在最后展示了基础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"))