Hello,

Em 19-08-2012 17:33, William Dunlap escreveu:
Did you omit
   m <- merge(A, B)
from your code?

Yes, completely forgot! It should be before the split/lapply.

Rui Barradas

Bill Dunlap
Spotfire, TIBCO Software
wdunlap tibco.com


-----Original Message-----
From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On 
Behalf
Of Rui Barradas
Sent: Sunday, August 19, 2012 3:52 AM
To: Francesco
Cc: r-help
Subject: Re: [R] merging and obtaining the nearest value

Hello,

Try the following.


A <- read.table(text="
TYPE   DATE
A            2
A            5
A            20
B            10
B            2
", header = TRUE)


B <- read.table(text="
TYPE  Special_Date
A              2
A              6
A              20
A              22
B              5
B              6
", header = TRUE)

result <- do.call( rbind, lapply(split(merge(A, B), list(m$DATE,
m$TYPE)), function(x){
          a <- abs(x$DATE - x$Special_Date)
          if(nrow(x)) x[which(min(a) == a), ] }) )
result$Difference <- result$DATE - result$Special_Date
result$Special_Date <- NULL
rownames(result) <- seq_len(nrow(result))
result


Also, it's a good practice to post data examples using dput(). For instance,

dput(A)
structure(list(TYPE = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("A",
"B"), class = "factor"), DATE = c(2L, 5L, 20L, 10L, 2L)), .Names =
c("TYPE",
"DATE"), class = "data.frame", row.names = c(NA, -5L))

Now all we have to do is run the statement A <- structure(... etc...) to
have an exact copy of the data example.
Anyway, your example with input and the wanted result was very welcome.

Hope this helps,

Rui Barradas

Em 19-08-2012 11:10, Francesco escreveu:
Dear R-help

Î would like to know if there is a short solution in R for this
merging problem...

Let say I have a dataset A as:

TYPE   DATE
A            2
A            5
A            20
B            10
B            2

(there can be duplicates for the same type and date)

and I have another dataset B as :

TYPE  Special_Date
A              2
A              6
A              20
A              22
B              5
B              6

The question is : I would like to obtain the difference between the
date of each observation in A and the closest special date in B with
the same type. In case of ties I would take the latest date of the
two.

For example I would obtain here

TYPE   DATE   Difference
A            2            0=2-2
A            5            -1=5-6
A            20            0=20-20
B            10           +4=10-6
B            2             -3=2-5

Do you know how to (simply?) obtain this in R?

Many thanks!
Best Regards

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to