【问题标题】:finding the last reading from a data.frame for ggplot2 using R使用 R 从 ggplot2 的 data.frame 中查找最后读数
【发布时间】:2013-05-29 20:05:17
【问题描述】:

我正在尝试绘制随时间变化的车辆价格。我想包括注册。没有车辆作为迷你图的标记。我的数据如下所示:

> head (x[c(1,2,3,4)])
   samp.date      idx price  reg.date
1 2012-11-15  xxxxxxb  27490  2010-3-1
2 2012-11-15  yyyyxxm  28990  2010-9-1
3 2012-11-15  zzzzzxxv 25980  2010-9-1
4 2012-11-15  aaaaaz   31995  2011-1-1
5 2012-11-15  aaaaaar  33995  2011-3-1
6 2012-11-15  aaaaxxc  30980  2011-3-1

对于任何给定的 idx,可能有许多示例日期 (samp.date),价格可能上涨也可能下跌。所以,我想我想使用最后一个采样日期和该采样日期的价格(+/- 一些软糖因素)来标记 ggplot 线,使用 geom_text。但是,我似乎无法提取正确的坐标。我认为 ddply(来自 plyr)是使用正确的工具,并且我认为我正在取得一些进展:

ddply (x, .(idx), function (x) { return (c(tail(x$samp.date, 1), as.numeric (tail (x$price, 1))))})

但这会将 x$price 值强制为日期:

          idx         V1         V2
 1    aaaaaau 2013-05-19 2082-03-24
 2    abbbbbb 2013-05-19 2082-03-24
 3    accccco 2013-03-17 2054-11-06
 4    adddddo 2013-05-19 2068-07-15

可能我可以使用 V2 作为 y 坐标,但如果它是一个数字而不是一个日期,我会更开心。 ddply 的函数必须返回矩阵而不是 data.frame 的问题吗?如果是这样,我如何为返回的不同维度获取不同的类?

我可以像这样或其他方式返回不同的类型/类吗?

【问题讨论】:

    标签: r plyr


    【解决方案1】:

    ddply 中的函数可能会返回一个数据帧。事实上,这是推荐的做法:

    ddply(x, .(idx), function (x) { 
            data.frame(date=tail(x$samp.date, 1),
                       price=as.numeric(tail(x$price, 1)))
          })
    

    【讨论】:

    • 谢谢,诺姆。我不确定是不是我,但我确实发现 R 作为一种编程语言非常尴尬。如果 ddply 应该返回一个 df,那么它为什么不将函数的返回强制转换为一个 df?
    • 根据ddply 的文档,“当 .fun 返回一个数据框时,实现了最明确的行为 - 在这种情况下,片段将与 rbind.fill 组合。如果 .fun 返回一个原子固定长度的向量,它将被重新绑定在一起并转换为数据帧。任何其他值都会导致错误。所以它确实将输出强制转换为数据帧,但只有在所有输出组合之后。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 2021-07-13
    • 2014-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2019-02-27
    相关资源
    最近更新 更多