Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从列出生日期和指定时间(r)计算年龄_R_Timestamp_Data Manipulation - Fatal编程技术网

从列出生日期和指定时间(r)计算年龄

从列出生日期和指定时间(r)计算年龄,r,timestamp,data-manipulation,R,Timestamp,Data Manipulation,从给定列出生日期和指定日期“2017-01-01”计算年龄,格式为R中的%y-%m-%d” name birth_date a 1964-09-01 b 1977-01-02 c 1977-01-04 d 1967-01-02 e 1977-04-02 f 1945-01-02 x <- data.frame("name" =c("a","b","c","d","e","f"), "birth_date" = c("1964-09-01"

从给定列
出生日期
和指定日期
“2017-01-01”
计算年龄,格式为R中的
%y-%m-%d”

name birth_date
 a    1964-09-01
 b    1977-01-02
 c    1977-01-04
 d    1967-01-02
 e    1977-04-02
 f    1945-01-02

 x <- data.frame("name" =c("a","b","c","d","e","f"), "birth_date" = c("1964-09-01","1977-01-02","1977-01-04","1967-01-02","1977-04-02","1945-01-02"))
x

difftime(as.Date(x$birth_date),as.Date(2017-01-01), units = "years")
姓名出生日期
a 1964-09-01
b 1977-01-02
c 1977-01-04
d 1967-01-02
e 1977-04-02
f 1945-01-02
在
difftime
中没有
“年”
单位,最大的单位是
“周”

一种方法是计算
difftime
“天”
,然后除以365.2422,得到年份差异

as.numeric(difftime(as.Date("2017-01-01"),as.Date(x$birth_date), units = "days")/365.2422)
#[1] 52.33514 39.99812 39.99264 49.99970 39.75170 71.99880

您也可以使用任何其他组合,例如选择
单位作为
“周”
,然后将其转换为等效的
“年”

代码中存在一些问题。首先,您的日期(2017-01-01)必须是引号中的字符串(“2017-01-01”)。其次,你可能想改变约会的顺序。第三,difftime没有“年”单位。在不引入其他软件包或方法的情况下,以下是几年内您可以获得的生日年龄的最佳近似值

x <- data.frame("name" =c("a","b","c","d","e","f"), 
                "birth_date" = c("1964-09-01","1977-01-02","1977-01-04","1967-01-02","1977-04-02","1945-01-02"))

as.numeric(difftime(as.Date('2017-01-01'), as.Date(x$birth_date), units = "days")/365.2422)

x您可以使用lubridate轻松完成

x <- data.frame("name" =c("a","b","c","d","e","f"), "birth_date" = c("1964-09-01","1977-01-02","1977-01-04","1967-01-02","1977-04-02","1945-01-02"))
x

library(lubridate)

x$birth_date <- ymd(x$birth_date)

x$age <- year(Sys.Date()) - year(x$birth_date)

x以下功能需要软件包
lubridate

它有两个参数:

  • 日期向量
  • 计算年龄的基准日期。默认为当前系统日期
  • 第一次调用使用默认的
    base
    。 第二个调用将问题中的基准日期作为第二个参数传递

    library(lubridate)
    
    age <- function(birth, base = Sys.Date()){
      i <- interval(birth, base)
      p <- as.period(i)
      year(p)
    }
    
    age(x$birth_date)
    #[1] 54 42 42 52 42 74
    
    age(x$birth_date, "2017-01-01")
    #[1] 52 39 39 49 39 71
    
    库(lubridate)
    年龄可能重复-甚至