【问题标题】:Have lubridate subtraction return only a numeric value让 lubridate 减法只返回一个数值
【发布时间】:2011-04-15 12:08:35
【问题描述】:

我有一个名为 Started 的变量,它是人类受试者参加研究的日期,另一个变量名为 dos1 是受试者最后一次手术的日期。我想计算从他们最后一次手术到入学之日的几个月。我试过了:

as.period(syrrupan$Started-syrrupan$dos1,units=c("month"))

我希望这会给我类似的东西:

14, 18, 1, 26 

每个数字都是月数。

相反,我得到:

1 year, -4 months, -5 days and -1 hours   1 year, -5 months, -23 days and -1 hours   1 year, -7 months, 2 days and -1 hours   1 year, -8 months, -28 days and 1 hour   1 year, -7 months, -23 days and 1 hour.   

我怎样才能得到月份的数值?

【问题讨论】:

    标签: r date package lubridate


    【解决方案1】:

    您可以尝试改用difftime,即:

    difftime(syrrupan$Started,syrrupan$dos1,units="days")
    

    请注意,这将为您提供一个 difftime 类的对象,如果您想要一个数字向量,请在其周围包裹一个 as.numeric。另请注意,您不能选择月份作为单位选项,但您应该坚持使用具有固定长度的时间单位。

    【讨论】:

    • 在这种情况下,您只需将上述结果除以 30.44。
    • difftime 来自基本包。由于列是“日期”,我还可以简单地输入 syrrupan$Started-syrrupan$dos1,它在几天内创建了一个类“difftime”的向量。顺便说一句,difftime 的语法不允许减号,而应该只是一个逗号。为了获得月份并在小数点后只有一个重要值,我使用了 round(as.numeric(difftime(syr​​rupan$Started,syrrupan$dos1,units="days"))/30.44,1)。在 lubridate 中,我能够完成这一轮(as.numeric(as.duration(syrrupan$Started-syrrupan$dos1))/60/60/24/30.44,1) 这似乎很笨重。
    • 对不起,是的,当我从问题中复制您的变量名称时,减号悄悄出现了。我现在已经确定了答案。
    • 当我需要几年的差异时没有帮助。请参阅time_length(),如下所示。
    【解决方案2】:

    这绝对是 lubridate 中的一个错误。我已经提交了一个错误报告,并将在 0.1 版中修复它:

    http://github.com/hadley/lubridate/issues#issue/75

    感谢您提请我注意。

    【讨论】:

      【解决方案3】:

      R - lubridate - Convert Period into numeric counting months 中所述,此处预期的润滑方法将是time_length

      time_length(syrrupan$Started-syrrupan$dos1, unit="days")
      
      猜你喜欢
      • 1970-01-01
      • 2014-01-03
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2011-02-10
      • 2018-12-30
      • 1970-01-01
      相关资源
      最近更新 更多