69 lines
2.5 KiB
Plaintext
Raw Permalink Normal View History

2025-01-12 00:52:51 +08:00
R Under development (unstable) (2020-09-23 r79248) -- "Unsuffered Consequences"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: x86_64-pc-linux-gnu (64-bit)
R is free software and comes with ABSOLUTELY NO WARRANTY.
You are welcome to redistribute it under certain conditions.
Type 'license()' or 'licence()' for distribution details.
R is a collaborative project with many contributors.
Type 'contributors()' for more information and
'citation()' on how to cite R or R packages in publications.
Type 'demo()' for some demos, 'help()' for on-line help, or
'help.start()' for an HTML browser interface to help.
Type 'q()' to quit R.
> library(survival)
> # the second data set is not sorted by id/date, on purpose
>
> df1 <- data.frame(id= 1:10,
+ y1= as.Date(c("1992-01-01", "1996-01-01", "1997-03-20",
+ "2000-01-01", "2001-01-01", "2004-01-01",
+ "2014-03-27", "2014-01-30", "2000-08-01",
+ "1997-04-29")))
>
> df2 <- data.frame(id= c(1, 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 9, 9, 9, 10,
+ 3, 3, 6, 6, 8),
+ y2= as.Date(c("1998-04-30", "2004-07-01", "1999-04-14",
+ "2001-02-22", "2003-11-19", "2005-02-15", "2006-06-22",
+ "2007-09-20", "2013-08-02", "2015-01-09", "2014-01-15",
+ "2006-12-06", "1999-10-20", "2010-06-30", "1997-04-28",
+ "1995-04-20", "1997-03-20", "1998-04-30", "1995-04-20",
+ "2006-12-06")))
>
> if (FALSE) { # plot for visual check
+ plot(y2 ~ id, df2, ylim=range(c(df1$y1, df2$y2)), type='n')
+ text(df2$id, df2$y2, as.numeric(1:nrow(df2)))
+ points(y1~id, df1, col=2, pch='+')
+ }
>
> i1 <- neardate(df1$id, df2$id, df1$y1, df2$y2)
> all.equal(i1, c(1, 3, 17, 5, 7, 8, 10, NA, 12, NA))
[1] TRUE
>
> i2 <- neardate(df1$id, df2$id, df1$y1, df2$y2, best="prior")
> all.equal(i2, c(NA, NA, 17, NA, NA, 18, 9, 11, 13, 15))
[1] TRUE
>
> indx <- order(df2$id, df2$y2)
> df3 <- df2[indx,]
> i3 <- neardate(df1$id, df3$id, df1$y1, df3$y2)
> all.equal(indx[i3], i1)
[1] TRUE
>
> i4 <- neardate(df1$id, df3$id, df1$y1, df3$y2, best="prior")
> all.equal(indx[i4], i2)
[1] TRUE
>
> indx <- c(2,3,10,9, 4,5, 7,8,1,6)
> df4 <- df1[indx,]
> i5 <- neardate(df4$id, df2$id, df4$y1, df2$y2)
> all.equal(i1[indx], i5)
[1] TRUE
>
> proc.time()
user system elapsed
1.000 0.046 1.034