R 计算数据帧的最新列之间的差异

R 计算数据帧的最新列之间的差异,r,R,如何获得数据帧的Date1列和Date2列之间的差异 Date1 Tfd Date2 Sex 13/08/1936 3 09/01/2013 M 25/04/1948 2 14/05/2014 M 26/01/1939 1 03/07/2015 F 13/02/1935 8

如何获得数据帧的
Date1
列和
Date2
列之间的差异

   Date1        Tfd             Date2       Sex
 13/08/1936      3           09/01/2013      M     
 25/04/1948      2           14/05/2014      M
 26/01/1939      1           03/07/2015      F
 13/02/1935      8           03/08/2012      F
我试过:

age<-apply(df[, c("Date1", "Date2")], function(x, y) difftime(strptime(y, format = "%d.%m.%Y"), strptime(x, format = "%d.%m.%Y"),units="years"))

您知道如何解决此问题吗?

您不需要在此处应用

as.numeric(as.Date(df$Date2, "%d/%m/%Y") - as.Date(df$Date1, "%d/%m/%Y"))
#[1] 27908 24125 27917 28296
difftime
没有
单位
作为
。最大
单位
为周。您可以将周值除以52.25,得到使用年份
lubridate
time\u length
函数

或者将
dplyr
difftime

library(dplyr)
library(lubridate)

df %>%
  mutate_at(vars(starts_with('date')), lubridate::dmy) %>%
  mutate(diff = time_length(difftime(Date2, Date1), 'years'))

#       Date1 Tfd      Date2 Sex diff
#1 1936-08-13   3 2013-01-09   M 76.4
#2 1948-04-25   2 2014-05-14   M 66.1
#3 1939-01-26   1 2015-07-03   F 76.4
#4 1935-02-13   8 2012-08-03   F 77.5

@Jeni It选择包含日期的列(此处为date1和date2),并对其应用函数
dmy
,将列更改为日期。
library(dplyr)
library(lubridate)

df %>%
  mutate_at(vars(starts_with('date')), lubridate::dmy) %>%
  mutate(diff = time_length(difftime(Date2, Date1), 'years'))

#       Date1 Tfd      Date2 Sex diff
#1 1936-08-13   3 2013-01-09   M 76.4
#2 1948-04-25   2 2014-05-14   M 66.1
#3 1939-01-26   1 2015-07-03   F 76.4
#4 1935-02-13   8 2012-08-03   F 77.5