R的十进制年龄

时间:2014-06-18 08:36:52

标签: r

我正在尝试根据出生日期和最近的日期计算小数。我有以下测试数据框。

df.1 <- structure(list(dob = structure(list(sec = c(0, 0, 0, NA, 0, 0
), min = c(0L, 0L, 0L, NA, 0L, 0L), hour = c(0L, 0L, 0L, NA, 
                                             0L, 0L), mday = c(18L, 24L, 25L, NA, 31L, 15L), mon = c(11L, 
                                                                                                     5L, 11L, NA, 11L, 11L), year = c(100L, 101L, 102L, NA, 99L, 101L
                                                                                                     ), wday = c(1L, 0L, 3L, NA, 5L, 6L), yday = c(352L, 174L, 358L, 
                                                                                                                                                   NA, 364L, 348L), isdst = c(0L, 1L, 0L, -1L, 0L, 0L), zone = c("GMT", 
                                                                                                                                                                                                                 "BST", "GMT", "", "GMT", "GMT"), gmtoff = c(NA_integer_, NA_integer_, 
                                                                                                                                                                                                                                                             NA_integer_, NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", 
                                                                                                                                                                                                                                                                                                                              "min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", 
                                                                                                                                                                                                                                                                                                                              "zone", "gmtoff"), class = c("POSIXlt", "POSIXt")), recent.date = structure(list(
                                                                                                                                                                                                                                                                                                                                sec = c(0, 0, 0, 0, 0, 0), min = c(0L, 0L, 0L, 0L, 0L, 0L
                                                                                                                                                                                                                                                                                                                                ), hour = c(0L, 0L, 0L, 0L, 0L, 0L), mday = c(3L, 2L, 4L, 
                                                                                                                                                                                                                                                                                                                                                                              3L, 1L, 2L), mon = c(5L, 5L, 5L, 5L, 5L, 5L), year = c(114L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                     114L, 114L, 114L, 114L, 114L), wday = c(2L, 1L, 3L, 2L, 0L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                             1L), yday = c(153L, 152L, 154L, 153L, 151L, 152L), isdst = c(1L, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          1L, 1L, 1L, 1L, 1L), zone = c("BST", "BST", "BST", "BST", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        "BST", "BST"), gmtoff = c(NA_integer_, NA_integer_, NA_integer_, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  NA_integer_, NA_integer_, NA_integer_)), .Names = c("sec", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "min", "hour", "mday", "mon", "year", "wday", "yday", "isdst", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "zone", "gmtoff"), class = c("POSIXlt", "POSIXt"))), .Names = c("dob", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      "recent.date"), row.names = c(NA, -6L), class = "data.frame")

使用lubridate函数和十进制日期,我试图将日期转换为十进制日期:

library(lubridate)
df.1$decimal.dob <- decimal_date(df.1$dob)
df.1$decimal.recent.date <- decimal_date(df.1$recent.date)

但是因为我错过了出生日期,当我尝试将出生日期转换为十进制年龄时,我收到错误。因此,我不能将'decimal.recent.date'列从'decimal.dob'列中取出来给我一个十进制年龄。

如果有人能帮我这个工作,我会非常感激!

1 个答案:

答案 0 :(得分:0)

因此,搜索并删除NA个条目。我假设如果有一个NA,比如dob$sec[j],那么dob$min[j]也是NA,依此类推。

killit <- which (is.na(dob$sec))
foo <- decimal_date(df.1$dob[-c(killit)])

#[1] 2000.962 2001.477 2002.981 1999.997 2001.953

您必须将df.1$decimal.dob缩小为与缩小的输入集相同的长度。