Tôi có hai khung dữ liệu với mỗi hàng cho mỗi ID. Tôi cần trả lại ngày gần nhất và dữ liệu liên quan từ khung dữ liệu thứ hai dựa trên ID và ngày của khung dữ liệu đầu tiên - thêm dữ liệu có liên quan vào khung dữ liệu đầu tiên. Điều này cũng phải làm việc với NA
s hiện diện trong khung dữ liệu thứ hai. dữ liệu Ví dụ:Hợp nhất ngày gần nhất và các biến có liên quan từ một khung dữ liệu khác theo nhóm
set.seed(42)
df1 <- data.frame(ID = sample(1:3, 10, rep=T), dateTarget=(strptime((paste
(sprintf("%02d", sample(1:30,10, rep=T)), sprintf("%02d", sample(1:12,10, rep=T)),
(sprintf("%02d", sample(2013:2015,10, rep=T))), sep="")),"%d%m%Y")), Value=sample(15:100, 10, rep=T))
df2 <- data.frame(ID = sample(1:3, 10, rep=T), dateTarget=(strptime((paste
(sprintf("%02d", sample(1:30,20, rep=T)), sprintf("%02d", sample(1:12,20, rep=T)),
(sprintf("%02d", sample(2013:2015,20, rep=T))), sep="")),"%d%m%Y")), ValueMatch=sample(15:100, 20, rep=T))
Something từ base
thích hợp hơn - split
và một hỗn hợp của gia đình apply
?
Bảng cuối cùng sẽ giống như thế:
ID dateTarget Value dateMatch ValueMatch
1 3 22-02-15 52 09-03-15 94
2 1 29-12-14 18 06-12-14 88
3 3 08-12-15 98 06-07-15 48
4 2 14-01-13 52 08-04-13 77
5 2 29-07-15 97 01-08-15 68
6 3 30-05-13 91 01-04-13 85
7 1 04-11-13 70 21-02-14 35
8 2 15-06-15 98 01-08-15 68
9 3 17-11-14 68 15-12-14 95
T.B. Có cách nào tốt hơn để tạo ra các ngày ngẫu nhiên (không sử dụng seq.Date
)?
Đối với "T.B." của bạn bạn sẽ có thể điều chỉnh http://stackoverflow.com/questions/14720983/efficiently-generate-a-random-sample-of-times-and-dates-between-two-dates với một 'as.Date' tại kết thúc hàm (và, có lẽ là một 'định dạng' nếu bạn cần nó trong'% d-% m-% Y' trong khung dữ liệu) – hrbrmstr
Bạn cũng có thể làm một cái gì đó như 'Sys.Date() + sample (-1000 : 1000, 20) 'nếu bạn không quan tâm quá nhiều về ngày bắt đầu/kết thúc –