【问题标题】:Calculate age in years and months by adding period class objects together with lubridate in R通过将周期类对象与 R 中的 lubridate 相加来计算以年和月为单位的年龄
【发布时间】:2017-06-08 17:53:53
【问题描述】:

我的数据有一个关于基线年龄的变量,以及一个关于基线观察后月数的后续变量。两者都是只有整数的数字向量。我想计算随访时的年龄。当我使用 lubridate 将这些变量解析为周期对象并将它们相加时,我得到的结果类似于 5 年 14 个月。理想情况下 - 我希望这是 6 年 2 个月。

例子

library(dplyr)
library(lubridate)
library(magrittr)

set.seed(080617)
df <- 
  tibble(year = sample(20),
     month = sample(20))

df %<>% 
  mutate(year = years(year)) %>% 
  mutate(month = months(month)) %>%
  mutate(age = (year + month))
df

我尝试使用df$age &lt;- as.period(df$age, units = "years") 无济于事。

有什么建议吗?

【问题讨论】:

  • 我建议在您的月份变量上使用 %/%%% 运算符,并使用 12 作为基数。例如,13 %/% 12 等于 1,13 %% 12 也等于 1,这意味着它是 1 年 1 个月。您应该能够在计算 yearmonth 时使用这些。

标签: r lubridate period


【解决方案1】:

这应该会为您提供您正在寻找的结果。我将列名更改为 year.col 和 month.col,以便更容易遵循逻辑

library(dplyr)
library(lubridate)
library(magrittr)

set.seed(080617)
df <- 
  tibble(year.col = sample(20),
         month.col = sample(20))

df %<>% 
  mutate(year.col = years(year.col)) %>% 
  mutate(month.col = months(month.col)) %>%
  mutate(age = year.col + years(month(month.col) %/% 12) + months(month(month.col) %% 12))

【讨论】:

  • 以前没有见过/使用过整数除法或模数 - 非常方便!这对于最小的示例非常有用。不幸的是,当我申请我的实际 数据时,我收到错误Error in as.POSIXlt.numeric(x) : 'origin' must be supplied。代码与上面相同,只是更改了相关的列名。有什么想法吗?
  • 其实我自己想出来的。我还加载了 miceVIM 包。删除那些,它工作正常。不确定实际的冲突,但嘿 - 它有效!
猜你喜欢
  • 2015-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-10
  • 2015-09-16
  • 1970-01-01
相关资源
最近更新 更多