Bạn có thể giải quyết điều này với các gói lubridate.
> library(lubridate)
Tôi không nghĩ/1931 là lớp ngày chung. Vì vậy, tôi sẽ giả định tất cả các mục là chuỗi ký tự.
> RECENT <- data.frame(recent = c("09/08/2005", "11/08/2005"))
> YEAR <- data.frame(year = c("/1931", "/1924"))
Trước tiên, hãy thông báo cho R rằng ngày gần đây là ngày. Tôi sẽ giả định ngày tháng theo thứ tự tháng/ngày/năm, vì vậy tôi sử dụng mdy(). Nếu họ đặt hàng ngày/tháng/năm, chỉ cần sử dụng dmy().
> RECENT$recent <- mdy(RECENT$recent)
recent
1 2005-09-08
2 2005-11-08
Bây giờ, hãy biến năm thành số để chúng tôi có thể thực hiện một số phép tính với chúng.
> YEAR$year <- as.numeric(substr(YEAR$year, 2, 5))
Bây giờ, chỉ cần thực hiện phép tính. year() chiết xuất giá trị năm của ngày RECENT.
> year(RECENT$recent) - YEAR
year
1 74
2 81
p.s.nếu mục năm của bạn đang thực sự đầy đủ ngày, bạn có thể nhận được sự khác biệt trong năm với
> YEAR1 <- data.frame(year = mdy("01/08/1931","01/08/1924"))
> as.period(RECENT$recent - YEAR1$year, units = "year")
[1] 74 years and 8 months 81 years and 10 months
liên quan: https://stackoverflow.com/questions/31126726/efficient-and-accurate-age-calculation-in-years -months-hoặc-week-in-r-given-b? noredirect = 1 & lq = 1 –